2011-09-28 67 views
7

我應該使用一個嗎?是更好地使用它們嗎?謝謝。obj和obj.hasOwnProperty(prop)和obj [prop]之間的區別?

+0

[MDN在操作者(https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/in),[MDN hasOwnProperty]( https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/hasOwnProperty),[MDN會員運營商](https://developer.mozilla.org/en/JavaScript/Reference/Operators/Member_Operators) – user113716

+0

更新的鏈接:[MDN在'運營商](https://developer.mozilla.org/en/JavaScript/Reference/Operators/in)。 [MDN'hasOwnProperty'](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/HasOwnProperty)。 [MDN會員運算符,括號符號](https://developer.mozilla.org/en/JavaScript/Reference/Operators/Member_Operators#Bracket_notation) –

回答

19
  • prop in obj檢查是否obj有一個名爲prop在所有的財產,即使它只是從一個原型繼承。

  • obj.hasOwnProperty(prop)檢查是否obj本身擁有一個名爲prop財產;它忽略了從原型繼承的屬性。

  • obj[prop]獲取prop屬性的值。

使用哪一個適合您要完成

什麼:在這三種情況下,prop必須是一個字符串。

+0

請問如果obj.prop和obj ['支柱']? SLaks –

0

只給了一個這樣的例子:

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的屬性(我知道hhmm嚇人),所以'in'操作符(狗的」腿「)將指代」腿「屬性w這是在狗物體中聲明的,而不是來自動物物體的遺傳「腿」。例如:

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 
相關問題