数据类型的种类
- 基本类型:
String、Number、Boolean、undefined、null、Symbol、bigInt - 引用类型:
object
一、基本类型
1.1 null和undefined
- null和undefined的区别:
- undefined:值是undefined和未声明的变量。运算符typeof运算结果都是
undefined。 - null: 值是null。运算符typeof运算结果都是
object。
- undefined:值是undefined和未声明的变量。运算符typeof运算结果都是
null == undefined; // true- JavaScript规范:要比较相等性之前,不能将 null 和 undefined 转换成其他任何值,并且规定null 和 undefined 是相等的。
null === undefined; // false- ===,全等,包括类型、值等各方面进行比较,null和undefined是属于两种类型;
- 获取 null 的类型:
-
typeof null; // Object-> 不对为什么:是一个BUG。在
JavaScript最初版本中,使用的 32 位系统,js 为了性能优化,使用低位来存储变量的类型信息。原因:在判断数据类型时,是根据机器码低位表示来判断的。正好,null的是全0,与Object的机器码低位标识
000一致,所以就被判断为object了数据类型与机器码标识:Object -> 000; 整数 -> 1; 浮点数 -> 010; 字符串 -> 100; 布尔 -> 110; undefined -> -2^31(即全为1); null -> 全为0;
至于后续版本包括ES6都不修复这个bug的原因:(信息来源途径:web.archive.org)
- ES6 提案了,但是被拒绝了。因为遗留代码太多,会破坏现有的规范
-
精准获取null类型的方式:
Object.prototype.toString.call(null) ; // [object Null]-
原理:
通过上图我们可知:1) Object对象和它的原型链上各自都有一个
toString()方法;2) Object对象 输出的是其函数体;Object 原型链上输出的是值类型。
toString(): 这个方法是将传入的数据类型转换成字符串输出。通过上图可知,null和undefined都是没有
toString()方法。而且,大多数对象,tostring()方法都是重写的,这时,需要用call()或Reflect.apply()等方法来调用
-
-
1.2 NAN
- 数值类型(Number),代表值不确定
1.3 String
字符串对象,用于表示和操作字符系列
- 和任何类型的值相加都变成字符串。例如:123 + 'qqq' == '123qqq';
二、引用类型
Object对象:由属性构成的无序集合
Object对象有哪些:
Function(函数)Array(数组)Date(日期)RegExp(正则表达式)