为什么不“”和☺有效的 JavaScript 变量名?
我注意到在 Internet Explorer 中(但不幸的是,在我测试的其他浏览器中没有),您可以使用一些 Unicode 变量名称。这让我很开心,我非常高兴能够编写这样有趣的 Unicode 代码:
var ктоείναι草泥马 = "You dirty horse.",
happy☺n☺mat☺p☺eia = ":)Yay!",
ಠ_ಠ = "emoticon";
alert(ктоείναι草泥马 + happy☺n☺mat☺p☺eia + ಠ_ಠ);
不过,出于某种原因,◎♫◎
、♨_♨
和☺
不是有效的变量名称。
为什么ಠ_ಠ
和草泥马
有效,但不是 ◎♨♨
、♨_♨
或 ☺
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
ಠ_ಠ
草泥马仅包含实际字母表中使用的“字母”;也就是ಠ
是卡纳达字母中的符号,草泥马由汉字组成。
然而,◎和☺纯粹是符号;它们不与任何字母表相关联。
ECMAScript 标准第 7.6 章(除 Internet Explorer 之外的所有浏览器都遵循该标准),规定标识符必须以以下之一。
$
或_
\
后跟 unicode 转义序列。标识符的以下字符必须是以下字符之一。
IE 超出了标准,并且足够允许某些符号,例如 ☺。
有一个一个工具可以告诉您输入的任何字符串是否是符合 ECMAScript 5.1 和 Unicode 6.1 的有效 JavaScript 变量名称。
ಠ_ಠ
and 草泥马 only contain "letters" used in actual alphabets; that is, ಠ
is a symbol from the Kannada alphabet, and 草泥马 consists of Chinese characters.
◎ and ☺, however, are purely symbols; they are not associated with any alphabet.
The ECMAScript standard, chapter 7.6 (which all the browsers except Internet Explorer are following), states that an identifier must start with one of the following.
$
or_
\
followed by a unicode escape sequence.The following characters of an identifier must be one of the following.
IE goes beyond the standard and is permissive enough to allow some symbols, such as ☺.
There’s a tool that will tell you if any string that you enter is a valid JavaScript variable name according to ECMAScript 5.1 and Unicode 6.1.
EcmaScript 262,第 7.6 节 规定名称必须以 $、_ 或 a 开头Unicode 字母,之后可能包含这些字符、Unicode 组合标记、Unicode 数字或 Unicode 连接器标点符号(以及一些作为语言的格式控制字符)具体。)
因此,在您的情况下允许和不允许的标识符之间的区别可能在于前导字符是否被视为“字母”。
EcmaScript 262, section 7.6 says names must start with $, _, or a Unicode letter, and after that may contain either those characters, or Unicode combining marks, Unicode digits, or Unicode connector punctuation (and a couple of format-control characters that are language specific.)
So, the difference between allowed and not allowed identifiers in your cases is probably whether the leading character is considered a "letter".
引用有效的 JavaScript 变量名称,我的文章总结了相关规范部分:
我还创建了 一个工具,它会告诉您是否有任何字符串您输入的是根据 ECMAScript 5.1 和 Unicode 6.3 的有效 JavaScript 变量名称:
PS 如果您要在 JavaScript 的单个 ASCII 正则表达式,长度将超过 9,000 个字符。这里是:
To quote Valid JavaScript variable names, my write-up summarizing the relevant spec sections:
I’ve also created a tool that will tell you if any string that you enter is a valid JavaScript variable name according to ECMAScript 5.1 and Unicode 6.3:
P.S. If you were to summarize all these rules in a single ASCII-only regular expression for JavaScript, it would be over 9,000 characters long. Here it is:
对于对象属性,您可以使用方括号语法:
For object properties, you can use square-bracket syntax: