2013-01-21 5 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

これは、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)、オブジェクトキーは文字列リテラル、数値リテラル、または識別子名でなければなりません。識別子名には '@'、 '-'などが使用できません、文字列liteになるには引用符で囲む必要がありますラルズ。 – jbabey

+0

ありがとうございます。完璧な説明。 – idbehold

関連する問題