Skip to main content

原始类型

Q:有哪几种数据类型

  • A:String、number、bigint、boolean、undefined、symbol、null

Q:原始值是否可以被改变?

  • A:不能,原始值不能被修改。

Q:javascript中的值被分为什么?

  • A:原始值和对象。

Q:什么是原始值?

  • A:符串、数字:在 JavaScript 中所有的数字都是浮点数、布尔值、nullundefined

Q:对象和原始值的区别有哪些?

  • A:

    不同点对象原始值
    能否添加属性与值可以不可以
    没有内部标识能否按值比较不可以可以
    标识存储内容存储地址
    是否有自己的方法5️⃣

    【解释】

    1. 对象是可变的(即可以给对象添加属性和值),而原始值不行

      var obj = {};
      obj.foo = 123; // 添加属性和值
      console.log(obj.foo) // 读属性,返回属性的值 123

      var str = "abc";
      str.foo = 123; // 添加属性(此操作将被忽略)
      str.foo // 读属性的值,返回 undefined
    2. 对象没有内部标识不能按值比较,而原始值可以。

      //每个对象都有自己唯一的标识符
      //因此通过字面量或构造函数创建的对象和任何其他对象都不相等
      {}==={}//false

      //对象是通过引用来比较的,只有两个对象有相同的标识,才认为这个对象是相等的。
      var obj = {};
      obj === obj //true

      //原始值没有内部标识,原始值是按值比较的
      //比较两个原始值的依据是他们的内容
      "abc" === "abc"
    3. 对象标识存储的是地址。

      //变量保存了对象的引用,
      var var1 = {};
      var var2 = var1;

      //因此,如果两个变量应用了相同的对象——我们改变其中一个变量时,两一个也会随之改变。
      var1.foo = 123; // 修改变量 val1 的属性 123
      var2.foo // val2 也改变了 123

数值

科学计数法

Q:科学计数法格式?

  • A:科学计数法允许字母eE的后面,跟着一个整数,表示这个数值的指数部分。

    123e3 // 123000
    123e-3 // 0.123

Q:什么情况下JavaScript 会自动将数值转为科学计数法表示?

  • A:

    1. 小数点前的数字多于21位。

      //多于21位的情况
      1234567890123456789012
      // 1.2345678901234568e+21


      //等于21位的情况
      123456789012345678901
      // 123456789012345680000
    2. 小数点后的零多于5个。

      // 小数点后紧跟5个以上的零,
      // 就自动转为科学计数法
      0.0000003 // 3e-7

      // 否则,就保持原来的字面形式
      0.000003 // 0.000003

浮点数

Q:是什么?

  • A:阿伏伽德罗数(又称:科学记数法)——一种表示全部整数,分数或小数的方法。

Q:javascript中的数(number)存储方式是什么?

  • A:全部是浮点数,以二进制形式,使用64个位来存储。

    存储规则:

    0 - 51 位是 分数f(fraction ) 52 - 62 位是 指数(exponent ) 63 位 是 标志位 (sign)

    说明标志位 (s, sign)指数(e, exponent )分数(f, fraction )
    所占大小(1 bit)(11 bit)(52 bit)
    位索引范围6362~5251~0
    值含义0表示正数,1表示负数
    决定了一个数的正负
    指数部分
    决定了数值的大小
    小数部分(即有效数字)
    决定了数值的精度

Q:为什么1===1.0为true

  • A:JavaScript 语言的底层根本没有整数,所有数字都是小数(64位浮点数)

Q:为什么0.1+0.2===0.3为false

  • A:浮点数不是精确的值

进制

Q:JavaScript 对整数提供的进制有哪些?

A:

  • 进制格式是否默认转为十进制
    十进制没有前导0的数值。
    八进制有前缀0o0O的数值,或者有前导0、且只用到0-7的八个阿拉伯数字的数值。
    十六进制有前缀0x0X的数值。
    二进制有前缀0b0B的数值。

特殊数值