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');

 

 










 

posted @ 2019-01-04 11:00  web-慰尘  阅读(262)  评论(0)    收藏  举报