obj和obj.hasOwnProperty(prop)和obj [prop]中的prop之间的区别?

时间:2011-09-28 02:34:02

标签: javascript

我应该使用一个吗?一起使用它们更好吗?感谢。

2 个答案:

答案 0 :(得分:22)

  • prop in obj检查obj是否具有名为prop的属性,即使它只是从原型继承而来。

  • obj.hasOwnProperty(prop)检查obj 本身是否包含名为prop的属性;它忽略了从原型继承的属性。

  • obj[prop]获取prop属性的值。

使用适合您想要完成的任何一项

注意:在所有三种情况下,prop必须是字符串。

答案 1 :(得分:1)

举一个例子:

var animal = {"legs": 4};
var dog = {"barks" : true};
dog.__proto__ = animal;    // JS inheritance (dog inherits from animal)

现在这意味着:

console.log("legs" in dog);    // TRUE - due to JS inheritance and since 'in' key looks into inherited prototypes
console.log(dog.hasOwnProperty("legs"));    // FALSE
console.log(dog.hasOwnProperty("barks"));    //TRUE

打印

true
false
true

再注意一件事:如果狗有"腿"让我们说5的属性(我知道哼哼哼哼),所以' in'操作员("腿"在狗中)将指向"腿"在狗对象中声明的属性,而不是继承的" leg"它来自动物物体。 e.g:

var animal = {"legs": 4};
var dog1 = {"barks": true};
var dog2 = {"barks": true, "legs": 5};
dog1.__proto__ = animal;
dog2.__proto__ = animal;

console.log(dog1.legs);
console.log(dog2.legs);
console.log("legs" in dog2) // 'in' refer to the un-inherited "legs" of dog2 

打印

4
5
true