2013-02-25 102 views
2

我需要獲取js物品的物業數量。獲取js物品的物品數量

我搜索,發現類似這樣的解決方案:

var foo = {"key1": "value1", "key2": "value2", "key3": "value3"}; 
var count = 0; 
for (var k in foo) { 
    if (foo.hasOwnProperty(k)) { 
     ++count; 
    } 
} 

問:爲什麼需要條件if (foo.hasOwnProperty(k)) {

我認爲這段代碼必須始終有效,沒有這種情況。

我錯了?

+0

的http:// stackoverflow.com/questions/8539921/javascript-is-a-member-defined希望可以幫助 – 2013-02-25 14:19:49

+0

只需執行Object.keys(foo).length',然後爲舊瀏覽器添加墊片即可。 – 2013-02-25 14:57:22

回答

1

某些對象具有由系統添加的屬性(即原型)。

您通常不希望對這些進行計數。你問的條件將確保你只計算屬於你的對象本身的屬性。

所以,如果你打算做一個函數,將返回任何對象的計數,它可能更好地包括條件,否則你不一定需要。

2

看到這個:How to efficiently count the number of keys/properties of an object in JavaScript?

是的,hasOwnProperty方法真的reduntant這裏。

無論如何,爲什麼你需要得到屬性計數?恐怕你正在解決一些不好的方法。

+0

如果您想避免對繼承的成員進行計數,則不是多餘的。希望沒有人會將成員添加到Object.prototype中,但它確實發生了(包括在流行的JavaScript框架的舊版本中)。 – 2013-02-25 14:28:19

+0

@ user1660584'無論如何,爲什麼你需要得到屬性計數?恐怕你正在解決一些不好的方法。「---我從php到js獲得了關聯數組,我需要在js中獲得這個數組。謝謝,謝謝大家 – RIKI 2013-02-25 14:44:07

1

這是爲了防止您計算遺傳成員。

如果你這樣做(不推薦):

Object.prototype.x = 1; 

那麼這給出了4計數:

var foo = {"key1": "value1", "key2": "value2", "key3": "value3"}; 
var count = 0; 
for (var k in foo) { 
    ++count; 
} 

但隨着if (foo.hasOwnProperty(k))它仍然給3