数据类型
- 7 种基本数据类型:string、number、boolean、null、undefined、symbol、bigint (基本数据类型不可变)
- 9 种数据类型:7 种基本数据类型 + Object + Function
typeof
typeof 的唯一目的就是检查数据类型
typeof 判断类型的原理是:根据数据存储的字节码判断;js 变量的机器码的1-3位存储类型信息
- 000:对象
- 010: 浮点数,表示这个数据是一个双精度浮点数的引用
- 100: 字符串
- 110: 布尔值
- 1: 表示这个数据是一个 31 位的有符号整型
- null:所有机器码都是0
- undefined: 值是 −2^30 整型(一个超出整型范围的数)
所以使用 typeof 判断 null 时,将 null 判断为对象
不要使用 typeof 检查从 Object 派生出来的结构类型(但 typeof fn === 'function'
), Object 种类的合适方式是使用 instanceof 关键字
instanceof
根据原型链来判断对象是否是类的实例
instanceof 原理
function new_instance_of(leftVaule, rightVaule) {
let rightProto = rightVaule.prototype; // 取右表达式的 prototype 值
leftVaule = leftVaule.__proto__; // 取左表达式的__proto__值
while (true) {
if (leftVaule === null) {
return false;
}
if (leftVaule === rightProto) {
return true;
}
leftVaule = leftVaule.__proto__
}
}