2013-07-04 37 views
1

是什麼這個Javascript對象/關聯數組的這兩個符號有什麼區別?

var person = { 
    name: "Bob", 
    age: "99" 
}; 

,這有什麼區別?

var person = { 
    "name": "Bob", 
    "age": "99" 
}; 

或者他們的意思是一樣的嗎?如果他們這樣做,如果我想讓鑰匙成爲一個對象呢?如果name表示"name",我將如何指定對象作爲關鍵字?

+0

對象不能是關鍵。對象可以是一個值。 – ElmoVanKielmo

+0

@ElmoVanKielmo該聲明既含糊又有誤導性。 _string_'「object」'是一個完全有效的屬性名稱。 –

+3

[對象鍵與引號和沒有引號之間的區別是什麼?](http://stackoverflow.com/questions/4348478/what-is-the-difference-between-object-keys-with-quotes-和無引號) – Bergi

回答

4

沒有區別。只有當您想使用字符串作爲屬性名稱時,引號纔是必需的,但該字符串不是有效的標識符。此外,

對象屬性名稱可以是任何有效的JavaScript字符串或任何可以轉換爲字符串的字符串,包括空字符串。但是,只能使用方括號表示法訪問任何不是有效JavaScript標識符的屬性名稱(例如,具有空格或破折號的屬性名稱,或以數字開頭)。

(source)

Object literal syntax is covered in-depth on MDN.

+1

另一個很好的鏈接,我找到有用的解釋。 [鏈接](http://mathiasbynens.be/notes/javascript-properties) –

+0

確實。 Mathias知道他的東西。 –

+0

並且在大多數瀏覽器中,如果屬性名稱是關鍵字,則必須使用引號 – Alnitak

0

它們在這種情況下是等價的,但引用的版本允許您使用不是有效JS標識符的密鑰。例如,這不起作用:

{ -test: 42 } 

而這樣做:

{ "-test": 42 } 

您不能指定一個對象作爲重點不管是什麼。

+0

我剛剛在Chrome中試過這個:'h = {};一個= {}; H [A] = 1; – akonsu

+0

@akonsu:'console.log(h)'看看發生了什麼。不是你想的。 – Jon

+2

您可以指定_anything_作爲鍵,但它會首先轉換爲字符串。 –