1. 作用
instanceof
运算符用于检测构造函数的prototype
属性是否出现在某个实例对象的原型链上。
2. 语法
object instanceof constructor
参数
object
:某个实例对象
constructor
:某个构造函数
描述
instanceof
运算符用来检测constructor.prototype
是否存在于参数object
的原型链上
3. 判断引用数据类型
function Person(name){
this.name = name
}
let p = new Person('张三')
console.log([] instanceof Array)
console.log({
} instanceof Object)
console.log(new Function() instanceof Function)
console.log(new Date() instanceof Date)
console.log(p instanceof Person)
4. 判断基本数据类型
console.log(123, 123 instanceof Number)
console.log('abc', 'abc' instanceof String)
console.log(false, false instanceof Boolean)
console.log(null instanceof Object)
console.log(undefined instanceof Object)
console.log(Symbol('123'), Symbol('123') instanceof Symbol)
用instanceof
判断基本数据类型返回值全是false
5. 重写instanceof()
递归写法:
var _instanceof = function(left, right){
if(left.__proto__ === null) return false;
if(left.__proto__ === right.prototype) return true;
return _instanceof(left.__proto__, right)
}
循环写法:
function _instanceof(left,right) {
// 补全代码
while(true){
if(left.__proto__ === null){
return false
}else if(left.__proto__ === right.prototype){
return true
}else{
left = left.__proto__
}
}
}