JS变量以“@”开头

时间:2012-04-24 18:56:52

标签: javascript

我遇到过某人的旧代码,其中包含的变量如下:@ user_id @,@ reference_id @等等。维基百科说:“在某些JavaScript实现中,at符号(@)可用于标识符......”在JS实现中,这有用吗?我无法让它发挥作用。

4 个答案:

答案 0 :(得分:6)

这完全有效:

var π = Math.PI;

这似乎无效:

var @yourName = "Jamund";

但这有效:

var $yourName = "Jamund";

如果你感到无聊并希望了解所有血腥细节: http://mathiasbynens.be/notes/javascript-identifiers

至于你的具体问题,是的,它可能是在评论中(JavaDoc在其评论中使用@,有时它的样式已在JS评论中使用)或者它意味着要处理并替换服务器端

答案 1 :(得分:6)

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

 IdentifierName ::
     IdentifierStart
     IdentifierName IdentifierPart

 IdentifierStart ::
     UnicodeLetter
     $
     _
     \ UnicodeEscapeSequence

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

答案 2 :(得分: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]

答案 3 :(得分:0)

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