用汉语作为对象的关键

时间:2015-04-23 06:38:36

标签: javascript object

如何使用中文字符或数字作为对象的关键字:

var obj = { 我: 'me',  20: 'you' };   

console.log(obj.我);  // me
console.log(obj[我]); // -> Reference Error: 我 is not defined

console.log(obj[20]); // you
console.log(obj.20);  // ->Syntax Error: Unexpected number

3 个答案:

答案 0 :(得分:7)

为了在对象中使用点表示法,键必须是有效的JavaScript标识符。 Mozilla Documentation Network州:

  

您可以使用ISO 8859-1或Unicode字母,例如å和üin   身份标识。您也可以使用Unicode转义序列   标识符中的字符。

事实上,在Firefox中,这是有效的语法:

var x = { 我: 5 };
x.我
var 我 = 42;
console.log(我);

Chrome也接受了这一点。

如果您的浏览器(或访问者使用的浏览器)不遵循严格的标准,您可以使用:

var obj = { '我': 'me',  20: 'you' };
console.log(obj['我']);

值得注意的是,您可以使用任意字符串作为对象键,即使它们不是有效的JavaScript标识符(例如,包含空格和/或标点符号):

var obj = { " ": "space", ";": "semicolon" };

答案 1 :(得分:0)

在.html *或.js文件中的源JS代码中包含非ANSI字符通常是一种不好的做法,因为它们在编辑文件时可能会丢失(即保存为ANSI而不是Unicode格式)或切换主机操作系统时。

考虑使用JavaScript的escape()方法将这些字符转换为它们的Unicode等价物(例如,escape('我')返回:"%u6211")。

检查以下链接以获取完整信息: W3C character escapes in markup and CSS

答案 2 :(得分:0)

您的疑惑是obj.我有效但obj[我]没有?另一方面,obj[20]呢?

嗯,20是一个值文字。您可以在任意位置编写20来创建数字值20。另一方面,不是任何有效的文字。如果要创建字符串值“我”,则需要编写'我'。另一方面,如果您希望成为变量名,则需要事先使用var 我声明变量。您看到的错误告诉您没有定义变量

另一方面,obj.20语法无效,因为20不是有效的变量名。原因是数字文字会创建数字,因此如果它们也可以用作变量名,则语法会变得模糊不清。 foo = 20是否意味着您要将数字20分配给foo,还是将变量20赋值?因此,数字文字是为数字,句号保留的。

obj.我  → requires valid symbol name, 我 is valid symbol name
obj[我] → requires valid *value*, 我 is not value literal nor declared variable

obj.20  → requires valid symbol name, 20 is not valid symbol name
obj[20] → requires valid *value*, 20 is valid value literal

这样可以正常工作:

var 我 = '我';
obj[我];