Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

JavaScript变量名与Unicode字符分类

  JavaScript的变量命名规则是很基础的东西,但是一般基础的教程只会简单的介绍,不会把事情说透。JavaScript的变量名不仅可以是那些我们熟知的ASCII字符,还可以是汉字。总之它允许使用Unicode中的某几类字符,我们得从Unicode字符分类中来分析它。
  虽然汉字可以作为变量名,但并不是所有多字节字符都可以 <script>
var 啊,あ,아,α; //表意文字可以作为变量名
try{
  eval("var 。");
}catch(e){
  alert("标点符号不能作为变量名");
};
try{
  eval("var ∫");
}catch(e){
  alert("数学符号不能作为变量名");
};
</script>
  这里只测试了基本的几个字符,但是Unicode那么多,一个个测试是不现实的。那么JavaScript到底允许什么样的字符做变量名呢?我们先来看看Unicode的字符分类。Unicode收录了所有人类使用的文字和符号,如果以后外星人来地球说不定也会收录它们的语言,所以它非常杂乱,因此需要分类。这里有张表格列出了所有Unicode的字符分类,表格有点长,为了避免影响阅读丢在文章最后了。
  那些看似元素符号的标识就是分类的标识符,在某些高级的正则表达式中(比如PHP的preg)可以使用这些标识符来对匹配某个分类的Unicode字符。而JavaScript的变量的支持可以用一个正则表达式来描述,当然这个正则表达式使用了Unicode分类匹配,所以JavaScript中运行这个正则表达式不能得到正确的结果,可以使用PHP等一些支持Unicode分类字符匹配的正则版本来测试。 $r='/^[$_\p{L}][$_\p{L}\p{Mn}\p{Mc}\p{Nd}\p{Pc}]*+$/';
echo preg_match($r,'啊'); //1
echo preg_match($r,'啊∫'); //0
echo preg_match($r,'1x'); //0
  在JavaScript 1.6之后新增了两个可以作为变量名的字符&zwnj;&zwj;,它们Unicode分别为\u200C和\u200D,这意味着在IE8-中使用这两个字符将出错,而现代浏览器可以正常执行。
<script>
try{
  eval("var $\u200C");
  console.log("\\u200C可用");
  eval("var $\u200D");
  console.log("\\u200D可用");
}catch(e){
  console.log(e);
};
</script>

  最后是上文提到的表格:

Unicode字符分类
标识 描述 说明
C Other 其它
Cc Control 控制
Cf Format 格式
Cn Unassigned 无符号
Co Private use 私有
Cs Surrogate 代替
L Letter 字母
Ll Lower case letter 小写字母
Lm Modifier letter 修正符字母
Lo Other letter 其它字母
Lt Title case letter 标题大写字母
Lu Upper case letter 大写字母
M Mark 标记
Mc Spacing mark 空格标记
Me Enclosing mark 环绕标记
Mn Non-spacing mark 非空格标记
N Number 数字
Nd Decimal number 十进制数字
Nl Letter number 字母数字
No Other number 其它数字
P Punctuation 标点符号
Pc Connector punctuation 连接标点符
Pd Dash punctuation 横线标点符
Pe Close punctuation 结束标点符
Pf Final punctuation 最终标点符
Pi Initial punctuation 起始标点符
Po Other punctuation 其它标点符号
Ps Open punctuation 开始标点符
S Symbol 符号
Sc Currency symbol 货币符号
Sk Modifier symbol 修正符号
Sm Mathematical symbol 算术符号
So Other symbol 其它符号
Z Separator 分隔符
Zl Line separator 行分隔符
Zp Paragraph separator 段落分隔符
Zs Space separator 空格分隔符

  参考:
    http://samples.geekality.net/js-identifiers/
    http://www.fileformat.info/info/unicode/category/index.htm
网名:
54.162.218.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^