数据类型的判断原理
typeof
typeof
一般被用于判断一个变量的基础类型
js 在底层储存变量的时候,会在变量的机器吗的低位 1-3位
储存其类型信息
- 000:对象
- 010:浮点数
- 100:字符串
- 110:布尔值
- 1:整数
但是,对于 undefined
和 null
来说,这两个值的信息存储是特殊的
null
:所有机器码均为 0
undefined
:用 −2^30 整数来表示
面试!
为什么typeof null的结果是Object?
- 在判断数据类型时,是根据机器码低位标识来判断的
- 而 null 的机器码标识为全0
- 但是底层的判断机制,只要前三位为 0,就会判定为object
- 所以typeof null的结果被误判为Object。
instanceof
instanceof
主要的作用就是判断一个实例是否属于某种类型
javascript
let person = function () {}
let p1 = new person()
p1 instanceof person // true
instanceof
也可以判断一个实例是否是其父类或者祖先类型的实例
javascript
let person = function () {}
let p = function () {}
p.prototype = new person()
let p1 = new p()
p1 instanceof person // true
p1 instanceof p // true
实现 instanceof 方法
js
function myInstanceof(leftV, rightV) {
// 取右表达式的 prototype 的值
let rigthProto = rightV.prototype
// 取左表达式的 __proto__ 值
leftV = leftV.__proto__
while (true) {
if (leftV === null) {
return false
}
// 严格相等时候 返回 true
if (leftV === rigthProto) {
return true
}
leftV = leftV.__proto__
}
}
Object.prototype.toString
判断原理:Object.prototype.toString 方法的原理