如何使用中文字符或数字作为对象的关键字:
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
答案 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[我];