我应该使用一个吗?一起使用它们更好吗?感谢。
答案 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