問題代碼
JS代碼:
JScript codevar 中文字符;
var 面食、包子=[包子,包子,面條,茄子];
見過正常的變量名,沒見過中文的正常的變量名。
所以…… 以上代碼可用嗎??
帶著問題,我們來看看 ECMAScript 的規(guī)定。
變量的定義
對于變量的定義,在ECMAScript 規(guī)范中規(guī)定有這么兩點(diǎn):
1. 第一個(gè)字符必須是字母、下劃線(_)或美圓符號($)。
2. 余下的字符可以是下劃線、美圓符號或任何字母或數(shù)字字符。
以上可用的字符集中沒有提到漢字和中文字符。
關(guān)于標(biāo)識(shí)符的更多信息,請參考 ECMAScript 規(guī)范 7.6 Identifier Names and Identifiers中的內(nèi)容。
變量名可以包含是漢字嗎?
做個(gè)測試,test.html(文件編碼為 UTF-8):
HTML code<META http-equiv=Content-Type content="text/html; charset=utf-8">
<script type="text/javascript">
var 中文字符 = "你好,世界";
alert(中文字符);
var 中文X字符 = "你好,世界X";
alert(中文X字符);
</script>
注意,一定要用 META 標(biāo)簽確保頁面編碼和文件編碼一致。
可喜可賀,所有瀏覽器都支持中文變量名。
變量名中可以包含中文字符嗎?
看一下的例子:
HTML code<META http-equiv=Content-Type content="text/html; charset=utf-8">
<script type="text/javascript">
var 中文、字符 = "你好,世界";
alert(中文、字符);
</script>
這次,除了 IE 之外,其他瀏覽器無一幸免。
再試一下英文和中文字符的混合變量:
HTML code<META http-equiv=Content-Type content="text/html; charset=utf-8">
<script type="text/javascript">
var as、you = "你好,世界";
alert(as、you);
</script>
IE 再一次表現(xiàn)力它的“寬容”,而其他瀏覽器又掛掉了。
看來
只有 IE 中的 Javascript 變量名支持中文字符。
蠱惑之中文逗號
一定要小心中文逗號分隔變量的做法:
HTML code<META http-equiv=Content-Type content="text/html; charset=utf-8">
<script type="text/javascript">
var as,you = "你好,世界";
alert(as,you);
</script>
這段代碼的原意是定義兩個(gè)變量,一個(gè)是 as,一個(gè)是 you,而且還給 you 賦了初始值。但是,事與愿違,逗號錯(cuò)了。所以,如果這時(shí)候你訪問 as 或者是 you,對不起,沒有…… IE里倒是有這個(gè)變量:as,you。
所以,要警惕這個(gè)中文的逗號:,。
解決方案
避免在變量名(即標(biāo)識(shí)符)中出現(xiàn)中文標(biāo)點(diǎn),以保證兼容各瀏覽器。