2014-03-29 80 views
26

这里有几个答案如何检查属性是否存在于对象中。Javascript:检查对象是否具有属性

我总是用

if(myObj.hasOwnProperty('propName')) 

,但我不知道是否有来自

if('propName' in myObj){ 
+1

为什么不只是“if(myObj.propName)”? – Dunken

+0

http://jsperf.com/hasownproperty-vs-in-vs-undefined/17 –

+0

嘿家伙,谢谢 - 抱歉,没有找到提到的dup。 – sebilasse

回答

41

他们几乎等于任何区别,所不同的是,hasOwnProperty不检查下来原型链,而in呢。

一个例子

var test = function() {} 

test.prototype.newProp = function() {} 

var instance = new test(); 

instance.hasOwnProperty('newProp'); // false 
'newProp' in instance // true 

FIDDLE

如指出的,只Object.hasOwnProperty返回“自己的属性”,即被直接加入的,而不是属性添加到prototype属性。

4

是的,有区别。 hasOwnProperty()忽略与prototype一起添加的属性和方法。我试着用例子来解释。例如,如果你有对象

Object.prototype.something = function() {}; 

的原型,并让我们说你有以下object

var obj = { 
    "a" : "one", 
    "b" : "two" 
}; 

环:

for (var i in obj) { 
    //if (obj.hasOwnProperty(i)) { 
     console.log(obj[i]); 
    //} 
} 

没有hasOwnProperty它将输出one two function(),同时与hasOwnProperty()方法只有one two

查看FirstSecond之间的区别DEMOS

相关问题