JS的数据类型
LadderLay opened this issue · 0 comments
LadderLay commented
数据类型:
七大原始数据类型
null undefined boolean string number symbol bigint
bigint
可以用于表示大于2^53-1的数
表示方式:
- 数字之后
➕ nlet 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
基础数据类型存储在栈区、引用数据类型存储在堆区
数据类型的判断/检测
- typeof
对于原始数据类型,除了null
以外都可以正确判断【typeof null //object】
对于引用数据类型,除了函数
均返回object
因此,typeof无法正确地进行类型判断 - instanceof
instanceof用于检测构造函数的prototype是否存在于某一实例的原型链上
关键:原型链的向上查找
Q:instanceof如何对原始数据类型进行判断 =》 symbol - 判断相等: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