LadderLay/JavaScript365

JS的数据类型

LadderLay opened this issue · 0 comments

数据类型:


七大原始数据类型

null undefined boolean string number symbol bigint

bigint

可以用于表示大于2^53-1的数

表示方式:

  • 数字之后n let x = 11n
  • BigInt构造器 BigInt(134)

⚠️注意点:

  • 不能使用Math对象方法
  • 不能和Number实例混合使用,需转换成同一类型(不建议,存在损失精度的问题)
  • 0==0n//true 0===0n//false

null

注意 typeof null === object //true
说明:在JS早期版本中,使用的是32位系统,采用了机器码低位标识变量类型。
而object标识为000,null为全0,从而产生了这样一个bug(或者说是feature).

引用数据类型 -object

基础数据类型存储在栈区、引用数据类型存储在堆区

数据类型的判断/检测

  1. typeof
    对于原始数据类型,除了null以外都可以正确判断【typeof null //object】
    对于引用数据类型,除了函数均返回object
    因此,typeof无法正确地进行类型判断
  2. instanceof
    instanceof用于检测构造函数的prototype是否存在于某一实例的原型链上
    关键:原型链的向上查找
    Q:instanceof如何对原始数据类型进行判断 =》 symbol
  3. 判断相等:Object.is & === 区别
    在===严格相等中:
  • 无法区别+0-0
  • 两个NaN视为不相等
    而Object.is对此进行了修复。
console.log(NaN === NaN);  //false
console.log(Object.is(NaN, NaN))  //true
console.log(+0 === -0);  //true
console.log(Object.is(+0, -0))  //false

转换 Q

console.log( [] == ![] )  // true
console.log( {} == !{} )  // false