2012-04-24 116 views
0

我遇到了某人的旧代码,其变量标识为:@ user_id @,@ reference_id @等等。维基百科说:“在某些JavaScript实现中,at符号(@)可以用于标识符中......”在JS实现中这是起作用的吗?我无法让它工作。以“@”开头的JS变量

+2

你舒尔,这不是一个产生的评论,解释有关某一功能的东西(的功能,参数)? – 2012-04-24 18:58:25

+4

他们有可能将这些令牌替换为服务器端。 – simshaun 2012-04-24 18:58:57

+1

即使它在一些随机JS引擎中工作,也无所谓,因为它在大多数情况下都不起作用。不要这样做。 – 2012-04-24 18:59:13

回答

6

这是完全正确的:

var π = Math.PI; 

这似乎并非是有效的:如果你感到无聊,想

var $yourName = "Jamund"; 

var @yourName = "Jamund"; 

这工作虽然学习所有的血淋淋的细节: http://mathiasbynens.be/notes/javascript-identifiers

至于你的具体问题,是的,它可能是在评论中(JavaDoc在其评论中使用@,有时它的风格已被用在JS评论中),或者它意味着被处理并取代服务器端。

6

第7.6章的ECMA-262, 5.1 edition定义了标识符是什么。由于@不允许,所以即使某些浏览器可能接受它,也不应该使用它。如果可能的话,您应该始终争取在所有浏览器中实现最广泛的兼容性。在标识符中不使用@不应以任何方式阻碍您。

IdentifierName :: 
    IdentifierStart 
    IdentifierName IdentifierPart 

IdentifierStart :: 
    UnicodeLetter 
    $ 
    _ 
    \ UnicodeEscapeSequence 

IdentifierPart :: 
    IdentifierStart 
    UnicodeCombiningMark 
    UnicodeDigit 
    UnicodeConnectorPunctuation 
    <ZWNJ> 
    <ZWJ> 
0

π是希腊语中使用的标准希腊字符,因此可以用于变量名。规则是您可以使用$ _或除JavaScript关键字以外的任何单词字符。但是,如果您使用访问者,则可以使用包含空字符串的禁止关键字:var forbidden ={}; forbidden[""]="hello";甚至可以在全局对象上执行此操作:window['@weird name for a variable'] = "There are very few good reasons to do this!!",但仅仅因为您可以不一定意味着您应该这样做!以这种方式命名的变量与任何其他变量相同,唯一的限制是必须使用方括号和字符串才能访问这些值。

2

单个@通常是一个JSDoc参数(如果它在注释块中)。用@包装这个词听起来像是一个自定义模板功能。但名称前面有@@通常是本地符号。我不相信你实际上可以在代码中使用它们,但是它们通常在文档中被引用。

E.g.Symbol.iterator被称为@@iterator,如:

  • Array.prototype[@@iterator]()
  • TypedArray.prototype[@@iterator]()
  • String.prototype[@@iterator]()
  • Map.prototype[@@iterator]()
  • Set.prototype[@@iterator]()

虽然在代码中你会用它作为这样的:

var myArray = [1, 2, 3, 4]; 
var it = myArray[Symbol.iterator](); 
console.log(it.next().value); // 1 
console.log(it.next().value); // 2 

你也可以看到引用:

  • @@match - RegExp.prototype[@@match]()
  • @@replace - RegExp.prototype[@@replace]()
  • @@split - RegExp.prototype[@@split]()
  • @@search - RegExp.prototype[@@search]()
  • @@species - Map[@@species]Set[@@species]
  • @@toPrimitive - Date.prototype[@@toPrimitive](hint)Symbol.prototype[@@toPrimitive]()
  • @@unscopables - Array.prototype[@@unscopables]