2012-02-08 162 views
7

比方說,我有以下對象:Javascript對象屬性引用

var VariableName = { 
    firstProperty: 1, 
    secondProperty: 2 
} 

我必須在這樣的報價來包裝對象的屬性?

var VariableName = { 
    'firstProperty': 1, 
    'secondProperty': 2 
} 

這是Single quotes in JavaScript object literal正確答案?

+2

可能有趣的是,雖然使用對象文字符號時可以從名稱中省略引號*,但JSON規範**要求**鍵名稱以**雙引號引起來。 – Matt 2012-02-08 11:39:15

回答

21

不,你不需要那樣做。

的唯一原因引用對象鍵

  • 屬性名保留/瀏覽器/ JS引擎(例如在IE「類」)
  • 你有特殊字符或白色使用在空間的關鍵

所以例如

var VariableName = { 
    "some-prop": 42, // needs quotation because of `-` 
    "class": 'foobar' // doesn't syntatically require quotes, but it will fail on some IEs 
    valid: 'yay' // no quotes required 
}; 
+3

這個答案並不準確。它沒有解釋那些「特殊字符」究竟是什麼(並且它沒有鏈接到這樣的解釋),並且它只提到ES3的行爲,其中保留字不允許用作未加引號的屬性名稱 - 在ES5中這是允許的。請在這裏查看我的重複問題的答案:http://stackoverflow.com/a/9568622/96656 – 2012-03-06 07:47:37

1

對於Javascript,您通常不必使用引號。如果您願意,您可以使用'",並且如果您的財產的名稱和一個JS保留詞如null之間發生衝突,則必須使用引號。是的,你鏈接的答案似乎是正確的。

對於JSON,you should use " around strings(包括對象的屬性名稱)的對象文本

4

屬性名必須是字符串,數字或標識符。如果名稱是一個有效的標識符,那麼你不需要引號,否則它們遵循與字符串相同的規則。

firstPropertysecondProperty都是有效的標識符,所以你不需要引號。

有關更多詳細信息,請參閱第65頁的the specification

4

你只需要使用如果屬性名稱是保留字(例如,for,in,function,...),則引用屬性周圍的引號。這樣你就可以防止Javascript嘗試將關鍵字解釋爲語言的一部分,並且很可能會出現語法錯誤。 此外,如果您要在屬性名稱中使用空格,則還必須使用引號。 如果您的屬性名稱只是沒有任何勾結潛力或空間的普通名稱,則可以使用您喜歡的語法。

另一個需要引號的可能性是使用Javascript縮小器,如google閉包編譯器,因爲它傾向於替換所有的屬性名稱。但是,如果將屬性名稱放在引號中,則閉包編譯器會在編碼時保留屬性。這在導出庫中的對象或使用參數對象時具有一定的相關性。