2011-01-19 52 views
2

下面是一個示例。我的擔憂似乎是做這項工作。他們中哪一個更喜歡?在JavaScript中,何時使用對象字面量以及何時使用數組?

var fooArr = [{ "bar": {"blah": 9 } }]; 

for(var i in fooArr) { 
    var value = fooArr[i].bar.blah; 
console.log(value); //checking in firebug console 
} 

var fooObj = { "bar": {"blah": 9 } }; 
for(var i in fooObj) { 
    var value = fooObj[i].blah; 
console.log(value); //checking in firebug console 
} 

此外,以下似乎無效,任何避免數組符號的方式。

var fooObj1 = { 
    { "bar": { "blah": 9 } }, 
    { "bar": { "blah": 4 } }, 
    { "bar": { "blah":12} } 
}; 

所以我不得不修改上面的代碼,像下面的工作。對象文字是否太粘太

var fooObj1 = { 
    1:{ "bar": { "blah": 9 } }, 
    2:{ "bar": { "blah": 4 } }, 
    3:{ "bar": { "blah":12} } 
}; 

再次感謝和提前幫助那些誰幫助我的查詢。

+0

我已將此鏈接與部分回答我的查詢的現有問題關聯。 「... JavaScript對象根本沒有length屬性,只有Arrays可以,如果你想知道在一個對象上定義的屬性的數量,你必須迭代它們並計數它們......」http:/ /stackoverflow.com/questions/4690520/javascript-object-literal-length-undefined/4690581#4690581 – Abhijit 2011-01-19 13:46:27

+1

你爲什麼要避免數組符號?它看起來像你想要的對象列表。一個對象只是一堆名稱/值對。在第二個例子中,你有3組沒有名字的對象可以引用它們。 – 2011-01-19 14:35:18

回答

8

該示例沒有真正比較對象和數組。您只需通過將對象放入數組的第一個元素來添加不需要的圖層。

當您必須按名稱引用某個對象時使用對象。

var obj = {} 

// 3種做同樣的事情的方法:

var obj.newName = 'bob'; 

var obj['newName'] = 'bob'; 

var name = 'newName'; 
var obj[name] = 'bob'; 

的第二風格是不是真的有必要,實際上可能是一個觸摸慢比第一次訪問,但它可以幫助您瞭解如何第三可以是有用的。或者你可以做徹底的以下內容:

var obj = { newName:'bob' } 

如果你想在一個對象一堆名字,它會得到一個有點傻:

var obj = { newName:'bob', anotherNewName:'sue', yetAnotherNewName:'billy' } 

obj.newName === 'bob' 
obj.anotherNewName === 'sue' 
//etc... 

這就是數組是。

var listOfNewNames = ['bob','sue','billy'] 
listOfNewNames[0] === 'bob' 
listOfNewNames[1] === 'sue' 
//etc... 

當然,沒有什麼能夠阻止從分配一個陣列的一個對象屬性:在陣列

obj { listOfNewNames:['bob','sue','billy'] } 

obj.listOfNewNames[0] === 'bob' 

或者,如上所示,多個對象:

var listOfMonsters = [ 
    { monsterName:'Grarrr',eats:'people' }, 
    { monsterName:'Wadsworth',eats:'other monsters'} 
]; 

listOfMonsters[1].monsterName === 'Wadsworth' 

對象是通常更多的是關於將相關價值和方法組合在一起以便於參考。數組只是所有可以被假定爲適用於或來源於同一事物的東西的列表。

1

當您知道您將擁有多個對象時,請使用數組。只有一個對象將被使用時,不需要一個項目數組。

正如你所看到的,語法也有點複雜(當你使用數組時,你有[...]bar - >使用更多的字符),所以如果你不需要的話,不要使用它。

1

如果您需要列表並使用對象(如果需要屬性),請使用數組。

在上述情況下,我更喜歡後者。

除此之外,從不在數組上使用for in(它是extremely slow並失敗了目的),並且在迭代對象的屬性時始終使用。

1

當您需要使用多個項目時,可以使用數組。例如:

var fooArr = [{ bar: { blah: 9 } },{ bar: { blah: 4 } },{ bar: { blah: 12 } }]; 
for(var i in fooArr) { 
    var value = fooArr[i].bar.blah; 
    console.log(value); // will log "9", "4" and "12" 
} 

在第二個例子中,你只有一個對象,所以你不需要循環在所有訪問屬性:

var fooObj = { bar: { blah: 9 } }; 
var value = fooObj.bar.blah; 
console.log(value); 
2

在可枚舉一個for .. in循環迭代。你可能想要read up就可以了。

如果你有對象的數組,我會建議一個傳統for循環:

var fooObjs = [ {bar: "blah"}, {bar: "blah2"} ]; 
for (var i = 0, j = fooObj.length; i < j; i++) { 
    console.log(fooObjs[i].bar); 
} 

如果你有多個屬性的對象,那麼你可以使用for .. in循環:

var fooObj = { bar: "blah", baz: "blah2" }; 
for (var i in fooObj) { 
    if (fooObj.hasOwnProperty(i)) { // So you don't log prototype properties 
    console.log(fooObj[i]); 
    } 
} 
相關問題