JavaScript类型检测笔记之instanceof

Js
yutao

instanceof

语法:object instanceof class
作用:判断一个实例是否属于某种类型
原理:判断某个构造函数的prototype属性是否存在另外一个要检测对象的原型链上Object.getPrototypeOf(object) === class.prototype
检测一下:

1
2
3
4
5
6
7
8
9
function AA(){}
AA.prototype = {};
var aa = new AA();
console.log(aa instanceof AA);//true
console.log(new String('hello') instanceof String); //true
console.log(new Number(1) instanceof Number); //true
console.log(function(){} instanceof Function); //true
console.log({} instanceof Object); //true
console.log([] instanceof Array); //true

instanceof运算符似乎是用来弥补typeof的不足而出现,它可以判断复杂引用类型。两者结合起来用比较靠谱。可是instanceof在多个frame之间还是存在一些问题比如:[] instanceof window.frames[0].Array //false。因为 Array.prototype !== window.frames[0].Array.prototype

关于instanceof的内容远不止我上面所记录,这次仅考虑它在类型判断方面的作用,期望自己在以后的项目中能深入理解!
参考:
MDN中文-instanceof
JavaScript instanceof 运算符深入剖析 - IBM
相关:
JavaScript类型检测笔记之typeof
JavaScript类型检测笔记之constructor