Javascript:检查对象是否具有属性

时间:2014-03-29 07:51:34

标签: javascript object properties

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

我一直在使用

if(myObj.hasOwnProperty('propName'))

但我想知道与

有什么不同
if('propName' in myObj){

2 个答案:

答案 0 :(得分:45)

它们几乎相等,不同之处在于hasOwnProperty不会检查原型链,而in会这样做。

一个例子

var test = function() {}

test.prototype.newProp = function() {}

var instance = new test();

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

FIDDLE

如上所述,Object.hasOwnProperty仅返回&#34;自己的属性&#34; ,即直接添加的属性,而不是添加到prototype的属性。< / p>

答案 1 :(得分: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

之间的差异