我注意到在Internet Explorer中(但不幸的是,在我测试的其他浏览器中没有),您可以使用一些Unicode变量名 . 这是我的一天,我非常高兴我能写出像这样的有趣的Unicode代码:
var ктоείναι草泥马 = "You dirty horse.",
happy☺n☺mat☺p☺eia = ":)Yay!",
ಠ_ಠ = "emoticon";
alert(ктоείναι草泥马 + happy☺n☺mat☺p☺eia + ಠ_ಠ);
但是,出于某种原因, ◎ܫ◎
, ♨_♨
和 ☺
不是有效的变量名 .
为什么 ಠ_ಠ
和 草泥马
工作,但 ◎ܫ◎
, ♨_♨
和 ☺
不工作?
编辑:在JSFiddle上的浏览器中测试它 . 我've tested it in Internet Explorer 9, Chrome, Firefox, and Opera. So far, it seems to only work in Internet Explorer 9. (I don't了解Internet Explorer 8及以下版本 . )让我知道它是否适用于其他浏览器 .
4 回答
对于伟大的正义:因为JS中的大多数东西都是“对象”,所以你可以使用方括号语法:
这与全局上下文中的var smth = true相同 .
EcmaScript 262, section 7.6表示名称必须以$,_或Unicode字母开头,之后可能包含这些字符,或Unicode组合标记,Unicode数字或Unicode连接符标点符号(以及一些特定于语言的格式控制字符) . )
因此,您的案例中允许和不允许的标识符之间的区别可能是主要字符是否被视为“字母” .
ಠ_ಠ和草泥马只包含实际字母中使用的"letters";也就是说,ಠ是Kannada alphabet的符号,草泥马由汉字组成 .
◎和☺,纯粹是符号;它们与任何字母表无关 .
ECMAScript standard, chapter 7.6(除了Internet Explorer之外的所有浏览器都遵循),声明标识符必须以下列之一开头 .
一个Unicode字母
$
或_
\
后跟一个unicode转义序列 .标识符的以下字符必须是以下之一 .
开头允许的任何字符
一个Unicode组合标记
一个Unicode数字
一个Unicode连接符标点符号
零宽度非连接器
零宽度木匠
IE超出了标准,并且允许足够允许某些符号,例如☺ .
根据ECMAScript 5.1和Unicode 6.1,a tool将告诉您输入的任何字符串是否是有效的JavaScript变量名称 .
引用Valid JavaScript variable names,我的文章总结了相关的规范部分:
我还创建了a tool,它会告诉您输入的任何字符串是否是根据ECMAScript 5.1和Unicode 6.3的有效JavaScript变量名称:
附:如果您要在a single ASCII-only regular expression for JavaScript, it would be over 9,000 characters long 中总结所有这些规则 . 这里是: