我遇到过某人的旧代码,其中包含的变量如下:@ user_id @,@ reference_id @等等。维基百科说:“在某些JavaScript实现中,at符号(@)可用于标识符......”在JS实现中,这有用吗?我无法让它发挥作用。
答案 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相同,唯一的限制是你必须使用方括号和字符串来访问这些值。