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

Javascript:检查对象是否具有属性,javascript,object,properties,Javascript,Object,Properties,这里有几个关于如何检查对象中是否存在属性的答案 我总是用 if(myObj.hasOwnProperty('propName')) 但我不知道这和我的想法有什么不同 if('propName' in myObj){ 它们几乎相等,区别在于hasOwnProperty不检查原型链,而in检查原型链 一个例子 var test = function() {} test.prototype.newProp = function() {} var instance = new test();

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

我总是用

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
只返回“自己的属性”,即直接添加的属性,而不是添加到
原型中的属性。是的,存在差异
hasOwnProperty()
忽略随
prototype
添加的属性和方法。我试着用例子来解释。例如,如果您有对象的原型

Object.prototype.something = function() {};
假设您有以下
对象

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

for ( var i in obj ) {
    //if (obj.hasOwnProperty(i)) {
        console.log(obj[i]);
    //}
}
没有
hasOwnProperty
时,它将输出
一两个函数()
,而只有
hasOwnProperty()
方法才会输出
一两个


查看和演示之间的差异

为什么不只是“if(myObj.propName)”?嘿,伙计们,谢谢-抱歉,没有找到提到的dup。