Javascript 用汉语作为宾语的关键

Javascript 用汉语作为宾语的关键,javascript,object,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 为了在对象中

如何使用汉字或数字作为这样一个对象的键:

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

为了在对象中使用点符号,键必须是有效的JavaScript标识符。国家:

您可以使用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标识符(例如,它们可能包含空格和/或标点符号):


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

例如,考虑使用JavaScript的escape()方法将这些字符转换为Unicode等效字符(即escape()我') 返回:“%u6211”)

检查以下链接以获取完整信息:

您的困惑在于
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[我];

你不能也不应该。这是JS语法限制。你不能这么做。是的,我们可以:
console.log(obj['我']);
(我们只是不能引用未定义的符号);与其他langs不同,JS从一开始就对unicode友好……众所周知,我们可以使用字符串作为键,因此我们称之为use obj['我’]. 如果是这样,当我们用中文或数字声明密钥时,发生了什么变化?让我们再看看一些代码:console.log(Object.keys(a));回答得很好,谢谢!哦,我知道。谢谢大家,我知道在我的项目中该怎么做。“Unicode等价物”…?我想你指的是Unicode字符转义序列。这些字符已经是“Unicode”(最广义的)了,没有比你现在更多的等价物了。你是对的,谢谢你指出这一点。
var 我 = '我';
obj[我];