instanceOf、typeof 、isPrototypeOf和hasOwnProperty介绍
typeof是判断一个对象数据类型时,但在使用 typeof 判断引用类型存储值会出现一个问题,
无论引用的是什么类型的对象,它都返回 "object" 如:
//判断普通对象数据类型 let obj = {} typeof obj //object //判断一个引用类型的数据类型 let arr = [] typeof arr //object
instanceof 就是判断一个实例是否属于某种类型,当想要更加明确的知道数据类型时需要使用instanceof
function Foo() {} let foo = new Foo() foo instanceof Foo //true
更重的一点是 instanceof 可以在继承关系中用来判断一个实例是否属于它的父类型
参考文献:https://www.ibm.com/developerworks/cn/web/1306_jiangjj_jsinstanceof/index.html
// 判断 foo 是否是 Foo 类的实例 , 并且是否是其父类型的实例 function Aoo(){} function Foo(){} Foo.prototype = new Aoo();//JavaScript 原型继承 let foo = new Foo(); console.log(foo instanceof Foo)//true console.log(foo instanceof Aoo)//true
isPrototypeOf 是用来判断指定对象object1是否存在于另一个对象object2的原型链中,是则返回true,否则返回false。
let p = {x:1};//定义一个原型对象
let o = Object.create(p);//使用这个原型创建一个对象
p.isPrototypeOf(o);//=>true:o继承p
Object.prototype.isPrototypeOf(p);//=> true p继承自Object.prototype
hasOwnProperty判断对象自己是否有指定的属性
语法:obj.hasOwnProperty(prop)// prop:要检测的属性名或对象
返回结果为Boolean ,自身包含指定属性返回true,不包含返回false,从原型链上继承的属性也是返回false
参考文献:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
let o = new Object(); o.prop = 'exists'; o.hasOwnProperty('prop'); // 返回 true o.hasOwnProperty('toString'); // 返回 false o.hasOwnProperty('hasOwnProperty');

浙公网安备 33010602011771号