这里有几个答案如何检查属性是否存在于对象中。Javascript:检查对象是否具有属性
我总是用
if(myObj.hasOwnProperty('propName'))
,但我不知道是否有来自
if('propName' in myObj){
这里有几个答案如何检查属性是否存在于对象中。Javascript:检查对象是否具有属性
我总是用
if(myObj.hasOwnProperty('propName'))
,但我不知道是否有来自
if('propName' in myObj){
他们几乎等于任何区别,所不同的是,hasOwnProperty
不检查下来原型链,而in
呢。
一个例子
var test = function() {}
test.prototype.newProp = function() {}
var instance = new test();
instance.hasOwnProperty('newProp'); // false
'newProp' in instance // true
如指出的,只Object.hasOwnProperty
返回“自己的属性”,即被直接加入的,而不是属性添加到prototype
属性。
是的,有区别。 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
为什么不只是“if(myObj.propName)”? – Dunken
http://jsperf.com/hasownproperty-vs-in-vs-undefined/17 –
嘿家伙,谢谢 - 抱歉,没有找到提到的dup。 – sebilasse