回答
在JavaScript中,這兩種方式都幾乎等同,你可以同時使用,但與加引號鍵版本不能定義與保留關鍵字的名稱屬性,例如:
// valid
var obj = {
'for': 'test'
};
// SyntaxError
var obj = {
for: 'test'
};
這就是爲什麼JSON standard允許按規範只能使用quoted keys。
編輯:好吧,現在讓我們看看爲什麼。
的Object initializer的語法是這樣定義的:
ObjectLiteral : {} { PropertyNameAndValueList } PropertyNameAndValueList : PropertyName : AssignmentExpression PropertyNameAndValueList , PropertyName : AssignmentExpression
而且屬性名令牌可以是:
PropertyName : Identifier StringLiteral NumericLiteral
如果是標識符,這是很清楚的並通過規範明確指出它不能是Reserved Word,因爲:
7.5.1 Reserved Words Description Reserved words cannot be used as identifiers.
而且,Identifier語法的第一個定義是:
Identifier :: IdentifierName but not ReservedWord
爲什麼?背後有什麼魔力? – user198729 2010-01-15 07:25:12
+1 CMS,很好的答案。 @unnown你不能使用沒有引號的任何保留字。下面是一個供您參考的列表:https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Reserved_Words – 2010-01-15 07:28:11
這是一個用作字典鍵的字符串,另一個是由語言分析的標記因此,然後將其用作字典中的字符串。 – 2010-01-15 07:28:30
我平時報價key和值是安全的。如果沒有引用,某些關鍵字和其他約束可能會導致密鑰錯誤。
第一種方式非常好,但有時您需要使用第二種方法,前提是您有一個聲明屬性爲保留關鍵字的問題。
引號總是一個字符串,否則解釋器可能會將其解釋爲文字關鍵字/變量。
您可以使用字符串或標識符來指定對象中的屬性。你甚至可以將它們混合:
var o = { 'id': 1, name: 'test'}
兩種途徑都給予同樣的結果(所不同的是,你還可以當您使用字符串中使用關鍵字和分隔符)。
在你可以使用一個標識符或字符串讀取性能類似的方式:
alert(o.id);
alert(o['name']);
注意屬性使用字符串創建可以使用標識符,反之亦然,這表明它的讀取只有創建和訪問屬性的不同方式,不管創建方法如何,結果屬性都是相同的。
定義這樣的對象時,您只需聲明標識符或變量。標識符有一定的規則,您可以在空閒時間在ECMAScript specification中查看,但兩種表格都是相同的。但是,當您嘗試使用保留或將來的保留關鍵字時,瀏覽器的行爲會有所不同。例如,這些不能用作標識符
break
do
instanceof
typeof
case
else
new
var
catch
finally
return
void
continue
for
switch
while
debugger
function
this
with
default
if
throwdelete
in
try
並非所有的瀏覽器都會將其標記爲錯誤,但有些可能。還有的未來保留關鍵字列表太:)
class
enum
extends
super
const
export
import
爲了安全起見,並沒有查找規格每一次,我會說其更好地引用您的標識符。要真正發現問題,請在Safari中檢查em',至少在版本4.0.4中使用任何這些關鍵字作爲標識符。例如,請嘗試以下:
var class = "my class";
不會在一個簡單的聲明或JSON對象類型聲明中工作:
var myObject = {
goodProperty: "this works",
class: "gimmeh the errarz codez!",
};
- 1. 這是符合標準的結果嗎?
- 2. 什麼是java中的標準對象?
- 3. 這是javascript中的錯誤嗎? Array對象的方法推送
- 4. 這個標準的JavaScript
- 5. 這是一種在JavaScript中擴展對象的新方法嗎?
- 6. 這是一個Vue.js中的JavaScript對象嗎?
- 7. Python標準庫真的是標準嗎?
- 8. 這是一個對象嗎?
- 9. 這是for-in循環標準嗎?
- 10. 這是一種favicon鏈接標準嗎?
- 11. JavaScript:是否允許覆蓋標準的內置對象?
- 12. javascript函數是對象嗎?
- 13. 模擬對象的標準
- 14. Grails的標準GROUPBY對象
- 15. 「this」對象的標準?
- 16. 這是識別JavaScript對象類型的好方法嗎?
- 17. 這是JavaScript對象文字鍵的嚴格限制嗎?
- 18. JSF:傳遞整個對象作爲EL中的參數是標準的嗎?
- 19. 是它在C++標準對準這樣的結構
- 20. 它是這樣標記對象的合法代碼嗎?
- 21. u_char是標準嗎?
- 22. javascript中的對象標識
- 23. JavaScript中的對象標識
- 24. Python標準庫中類似JavaScript的對象?
- 25. 是在WCF服務多平臺中創建的標準C#類對象嗎?
- 26. JavaScript中的對象很慢嗎?如果是這樣的話多少
- 27. 是String.contains在JavaScript中的標準功能?
- 28. JQuery的這個JavaScript對象
- 29. 對象值對的標準結構
- 30. Javascript這是未定義的。這應該是全局對象
我傾向於第一種模式,但是這只是我。 – 2010-01-15 07:29:05