JS数据类型及类型判断
数据类型
JS 数据类型分为两类:原始数据类型和引用数据类型。
原始数据类型
原始数据类型的特点:值保存在变量本地,且赋值给其他变量后,其它变量改变不影响原来的值,变量存放在栈区(栈区指内存里的栈内存)。
原始数据类型有七种,分别是Number、String、Boolean、Null、Undefined、Symbol 、 BigInt。
引用数据类型
引用数据类型的特点:引用类型的值是可变的;引用类型的值是保存堆内存中的对象;引用数据类型值的比较本质上是内存地址的比较。
引用数据类型包括 Object、Array、RegExp、Date、Function等(在 JS 中除了基本数据类型以外的都是对象,如数组、函数、正则表达式等)。
数据类型判断方法
常用的数据类型判断方法有 3 种:typeof
,instanceof
,Object.prototype.toString.call()
。
typeof
typeof
操作符返回一个字符串,表示未经计算的操作数的类型。对于原始类型来说,除了null
都可以调用typeof
显示正确的类型,但对于引用数据类型,除了函数之外,都会显示object
。
1 | console.log(typeof "hello"); // string |
关于typeof null === object的问题:在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是 0。由于null
代表的是空指针(大多数平台下值为0x00
),因此,null
的类型标签是 0,typeof null
也因此返回 object
。
instanceof
引用类型的可以用instanceof
来检测,但是instanceof
无法准确判断 Function
。
1 | console.log({} instanceof Object); // true |
Object.prototype.toString.call()
Object.prototype.toString.call()
是对象的一个原生原型扩展函数,适用于所有类型的判断检测。
1 | console.log(Object.prototype.toString.call(function () {})); // [object Function] |