说明:跟随MDN 数据类型与数据结构 [3] 进行复习
- js 数据类型包含基础数据类型和对象;
基础数据类型
- 基础数据类型:undefined、null、Boolean、Number、BigInt、String、Symbol
- 所有基本数据类型的值都不可变,基本数据类型没有方法。但在基本类型上访问属性时,比如str.length,js自动将值装入包装器对象中并访问对象上的属性 [4] ;undefined、null没有Object wrapper(对象包装器); 对象包装器在访问属性时被创建、在该属性引用结束时销毁 [2]
基础数据类型如何判断其类型
除null外,都可使用typeof 判断出其数据类型;null 使用 === null判断
详解undefined与null
[9] : juejin.cn/post/715652…
数值类型
- 数值类型包括Number、BigInt; Number(数字类型)包含浮点数、+Infinity、-Infinity、NaN; BigInt可表示任意精度的整数,可以安全地存储和操作大整数,甚至超过数字类型的安全整数限制;
- BigInt转换成布尔时,行为同数字类型;BigInt不能与数字类型相互转换;
对象
- 对象有数据属性(Value\Enumerable\Writable\Configurable)和访问属性(Get\Set\Enumerable\Configurable);
-
对象类型包含
- 标准对象和函数;
- 日期;
- 结构化数据:JSON;
- 带键的集合 [8] :Maps(使{key: value}中key不被转换成字符串)、Sets(不重复的类数组结构)、WeakMaps、WeakSets;
- 有序集: 数组和类型数组
对象类型的判断
-
typeof: typeof object
- 返回结果为:‘object’ or 'function'('function'包含:function、 class)
- 为什么class也是function? 因为js没有类,用原型链实现的类;类与构造函数详见: [6] juejin.cn/post/715652…
-
instanceof: object instanceof constructor
-
instanceof用于检测constructor.prototype是否存在于参数object的原型链上 [7] ;比如:
- 检测dog是不是继承自animal;
- let c = 'abc'; c instanceof String // true; c instanceof Object // true
-
原型链可被使用__proto__修改,所以使用instanceof判断对象类型不可靠
-
-
Object.prototype.toString.call() 可用于检测对象类型
js标准内置对象
[5] JavaScript 标准内置对象 - JavaScript | MDN (mozilla.org)
小结
Object.prototype.toString.call()可以具体判断出value的数据类型;
typeof可以用于基本数据类型的判断;
instanceof可以判断出其原型链上是否出现过constructor.prototype
其他
文中“对象包装器在访问属性时被创建、在该属性引用结束时销毁”该段话存在争议。比如:
如何解释第一段代码执行比第二段快呢?
var s1='a';
var temp;var d0=new Date();for(var i=0;i<1000000;i++){temp = s1.length+s1+s1.substr()} console.log((new Date()-d0) + '----' + temp)
var s1=new String('a');
var temp;var d0=new Date();for(var i=0;i<1000000;i++){temp = s1.length+s1+s1.substr()} console.log((new Date()-d0) + '----' + temp)
参考资料
[2] js包装对象(最核心)
[3] JavaScript 数据类型和数据结构 - JavaScript | MDN (mozilla.org)
[4] 基本类型 - 术语表 | MDN (mozilla.org)
[5] JavaScript 标准内置对象 - JavaScript | MDN (mozilla.org)
[6] js 对象与类 -- ES5、ES6构造函数与类创建对象的详细区别
[7] instanceof - JavaScript | MDN (mozilla.org)
[8] Set 和 Map 数据结构