2013-01-21 74 views
8
var @foo = 'bar'; 
// SyntaxError: missing variable name. 

{ '@foo' : 'bar' }; 
// SyntaxError: invalid label. 

var obj = { '@foo' : 'bar' }; 
[email protected]; 
// TypeError: can't convert AttributeName to string 

var obj = { '@foo' : 'bar' }; 
obj['@foo']; 
// "bar" 

任何人都可以向我解釋爲什麼不允許在變量名稱中使用'@'符號,而我應該使用應該使用它嗎?爲什麼在javascript中保留'@'符號以及它的用途是什麼?

+0

它用於e4x某些特殊類型的語法來遍歷xml – philipp

+0

以及你不能使用''''''或'''它是無效的變量名稱的語法 – VisioN

+0

可能的重複的[關於JavaScript對象屬性名稱的問題](http://stackoverflow.com/questions/5006049/a-question-about-javascript-object-property-name) – jbabey

回答

7

它不是保留或特殊的,它只是不是一個有效的JavaScript標識符字符。出於同樣的原因,這個工程:

var obj = { 'foo-baz' : 'bar' }; 
obj['foo-baz']; 

這並不:

var obj = { 'foo-baz' : 'bar' }; 
obj.foo-baz; 

有效的JavaScript標識符必須以字母或$開始,並且只能包含字母,數字,$_。屬性名稱中的其他內容將強制您使用括號表示法。

Related question

+0

好吧,這是有道理的。但是,我知道' - ''''做了什麼?'@'做什麼? – idbehold

+1

@idbehold它與符號的作用無關('@'在javascript中沒有特殊含義,如果您好奇) - 根據[spec](http ://ecma262-5.com/ELS5_HTML.htm#Section_11.1.5),對象鍵必須是字符串文字,數字文字或標識符名稱。由於'@','-'等不允許用於標識符名稱,它們必須用引號包裹才能成爲字符串精簡版RALS。 – jbabey

+0

謝謝,先生。完美的解釋。 – idbehold

相關問題