为什么在javascript中保留'@'符号,它的目的是什么?

idb*_*old 8 javascript

var @foo = 'bar';
// SyntaxError: missing variable name.

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

var obj = { '@foo' : 'bar' };
obj.@foo;
// TypeError: can't convert AttributeName to string

var obj = { '@foo' : 'bar' };
obj['@foo'];
// "bar"
Run Code Online (Sandbox Code Playgroud)

任何人都可以向我解释为什么不允许在变量名中使用'@'符号以及我应该使用它的原因是什么?

jba*_*bey 7

它不是保留或特殊的,它不是一个有效的JavaScript标识符字符.出于同样的原因,这有效:

var obj = { 'foo-baz' : 'bar' };
obj['foo-baz'];
Run Code Online (Sandbox Code Playgroud)

而这不是:

var obj = { 'foo-baz' : 'bar' };
obj.foo-baz;
Run Code Online (Sandbox Code Playgroud)

有效的javascript标识符必须以字母或开头$,并且可能只包含字母,数字$_.属性名称中的任何其他内容都将强制您使用括号表示法.

相关问题.

  • @idbehold 它与符号的作用无关(如果您好奇,`@` 在 javascript 中没有特殊含义) - 根据 [spec](http://ecma262-5.com/ELS5_HTML.htm #Section_11.1.5),对象键必须是字符串文字、数字文字或标识符名称。由于“@”、“-”等不允许出现在标识符名称中,因此它们必须用引号括起来才能成为字符串文字。 (2认同)