这里有几个答案如何检查对象中是否存在属性。
我一直在使用
if(myObj.hasOwnProperty('propName'))
但我想知道与
有什么不同if('propName' in myObj){
答案 0 :(得分:45)
它们几乎相等,不同之处在于hasOwnProperty
不会检查原型链,而in
会这样做。
一个例子
var test = function() {}
test.prototype.newProp = function() {}
var instance = new test();
instance.hasOwnProperty('newProp'); // false
'newProp' in instance // true
如上所述,Object.hasOwnProperty
仅返回"自己的属性" ,即直接添加的属性,而不是添加到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