【分享】警惕带有中文字符的JS变量

WebAdvocate 2010-09-13 05:00:50
加精
问题代码
JS代码:
var 中文字符;
var 面食、包子=[包子,包子,面条,茄子];
见过正常的变量名,没见过中文的正常的变量名。
所以…… 以上代码可用吗??
带着问题,我们来看看 ECMAScript 的规定。

变量的定义
对于变量的定义,在ECMAScript 规范中规定有这么两点:
1. 第一个字符必须是字母、下划线(_)或美圆符号($)。
2. 余下的字符可以是下划线、美圆符号或任何字母或数字字符。
以上可用的字符集中没有提到汉字和中文字符。

关于标识符的更多信息,请参考 ECMAScript 规范 7.6 Identifier Names and Identifiers中的内容。

变量名可以包含是汉字吗?
做个测试,test.html(文件编码为 UTF-8):
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<script type="text/javascript">
var 中文字符 = "你好,世界";
alert(中文字符);

var 中文X字符 = "你好,世界X";
alert(中文X字符);
</script>
注意,一定要用 META 标签确保页面编码和文件编码一致。
可喜可贺,所有浏览器都支持中文变量名。

变量名中可以包含中文字符吗?
看一下的例子:
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<script type="text/javascript">
var 中文、字符 = "你好,世界";
alert(中文、字符);
</script>
这次,除了 IE 之外,其他浏览器无一幸免。

再试一下英文和中文字符的混合变量:
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<script type="text/javascript">
var as、you = "你好,世界";
alert(as、you);
</script>
IE 再一次表现力它的“宽容”,而其他浏览器又挂掉了。

看来
只有 IE 中的 Javascript 变量名支持中文字符。

蛊惑之中文逗号
一定要小心中文逗号分隔变量的做法:
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<script type="text/javascript">
var as,you = "你好,世界";
alert(as,you);
</script>
这段代码的原意是定义两个变量,一个是 as,一个是 you,而且还给 you 赋了初始值。但是,事与愿违,逗号错了。所以,如果这时候你访问 as 或者是 you,对不起,没有…… IE里倒是有这个变量:as,you。

所以,要警惕这个中文的逗号:[size=50px][/size]。

解决方案
避免在变量名(即标识符)中出现中文标点,以保证兼容各浏览器。

原文
http://www.w3help.org/zh-cn/causes/SJ9008

更多兼容性问题:
【分享】浏览器兼容性问题目录
...全文
6958 103 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
103 条回复
切换为时间正序
请发表友善的回复…
发表回复
liqianbit 2010-09-24
  • 打赏
  • 举报
回复
好东西,学习来了,下次拿出去吓人一跳
xiaoyuehen 2010-09-23
  • 打赏
  • 举报
回复
中文变量?闲得蛋疼了吧?
linwengk 2010-09-23
  • 打赏
  • 举报
回复
再次路过
shiyanming1223 2010-09-22
  • 打赏
  • 举报
回复
关注,
xxmiaoyong126com 2010-09-21
  • 打赏
  • 举报
回复
变量命名很有讲究的啊,
中文变量岂不儿戏?
  • 打赏
  • 举报
回复
不建议用中文,包括注释.
英文瞥脚也要写英文.
风往北吹哈 2010-09-21
  • 打赏
  • 举报
回复
学习了!
生活真美好 2010-09-21
  • 打赏
  • 举报
回复
[Quote=引用 97 楼 yzwlord 的回复:]
好东西,以后注意些。
[/Quote]
wszjfei 2010-09-20
  • 打赏
  • 举报
回复
顶起~支持~[Quote=引用 31 楼 ithurricane 的回复:]

关 注
[/Quote]
wangpuw 2010-09-20
  • 打赏
  • 举报
回复
很好很好
MeBoss 2010-09-20
  • 打赏
  • 举报
回复
基本上 不会写大写的吧 不过本着每日一回帖的的原则 顶啊
lyly32954 2010-09-20
  • 打赏
  • 举报
回复
没事我就路过一下
Abcix 2010-09-20
  • 打赏
  • 举报
回复
宽容并不一定是好事,宽容也是一种放纵。无规矩不成方圆,我觉得还是有规范的好,省得为了兼容不同浏览器让开发者头疼。
kerioz 2010-09-20
  • 打赏
  • 举报
回复
楼主可以考虑去做测试
kennyhuanghb 2010-09-20
  • 打赏
  • 举报
回复
..............
yzwlord 2010-09-20
  • 打赏
  • 举报
回复
好东西,以后注意些。
tantaiyizu 2010-09-19
  • 打赏
  • 举报
回复
完全没有必要用中文变量名
zrkoreyoshi 2010-09-19
  • 打赏
  • 举报
回复
“用中文做变量名,不是怕引起错误的问题,而是有没有意义的问题”
LWBOSS 2010-09-19
  • 打赏
  • 举报
回复
vc可以使用中文变量名以后,
再也没用过英文变量名的来接点分!
tangweiwei0000 2010-09-19
  • 打赏
  • 举报
回复
一般很难会出现这种情况啊,呵呵
加载更多回复(83)

5,007

社区成员

发帖
与我相关
我的任务
社区描述
解读Web 标准、分析和讨论实际问题、推动网络标准化发展和跨浏览器开发进程,解决各种兼容性问题。
社区管理员
  • 跨浏览器开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧