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[我];