本章主要分为两部分:typeof 是否能正确的判断类型、instanceof 能正确判断类型的原理
typeof 能否正确判断类型
当然,typeof
对于原始类型来说,除了null
都能准备判断类型
1 | typeof 123 // 'number' |
typeof
对于对象来说,除了函数都会输出object
,所以typeof
并不能准确判断变量类型
1 | typeof {} // 'object' |
那当我们需要准确判断对象类型时,就可以使用instanceof
,因为其内部机制是通过原型来判断的
1 | function Person() {} |
我们可以看到,对于原始类型instanceof
并不能准确判断其类型,但是我们利用Symbol.hasInstance
来实现
1 | class PrimitiveString { |
Symbol.hasInstance 可以让我们自定义 instanceof
操作符在某个类上的行为,
所以 'hello world' instanceof PrimitiveString
就相当于 typeof 'hello world' === 'string'
instanceof 的原理是什么?
上面提到过 instanceof
能够准确判断对象类型,因为其内部机制是通过判断对象的原型链中能不能找到类型的 prototype
,
下面是简单的实现:
1 | function myInstanceof(left, right) { |
大体实现思路:
- 首先获取类型的原型
- 然后获取对象的原型
- 然后一直循环判断类型的原型是否等于对象的原型,直到对象的原型为
null
本文完, 感谢阅读。