instanceof 用于判断在某个对象的原型链上查找是否存在一个构造函数的 prototype 属性
1 2 3 4 5 6 7 8
| const obj = { name: 'tan' }
const arr = [1, 2, 3]
console.log(obj instanceof Object) console.log(arr instanceof Array)
|
判断内容必须为对象
1 2 3 4 5 6 7 8 9
| let a = 10 let b = new Number(10) console.log(a instanceof Number) console.log(b instanceof Number)
console.log(a.__proto__ === Number.prototype)
const arr = [1, 2, 3] console.log(arr instanceof Object)
|
手写 instanceof
instanceof
在查找的过程中会遍历左边变量的原型链,直到找到右边变量的 prototype
查找失败,返回 false
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| const _instanceof = function (obj, _constructor) { while (obj) { if (obj.__proto__ === _constructor.prototype) { return true } obj = obj.prototype } return false }
const arr = [1, 2, 3]
console.log(_instanceof(arr, Object)) console.log(_instanceof(arr, Array))
|