这个Javascript对象的文字键限制是否严格由于解析?

Geo*_*pty 10 javascript parsing object object-literal

请参考下面的代码,当我"注释"任何一条注释掉的行时,它会导致错误(在IE中)为"':'expected".那么我的结论是正确的,即无法提供对象值的引用,作为字符串文字中的对象键; 这是严格的解释/解析问题吗?与Crockford的"好部分"相比,这是否是Javascript的可怕(或至少"坏")"部分"的候选者?

<script>
var keys = {'ONE': 'one'};

//causes error:
//var obj1 = {keys.ONE: 'value1'};
//var obj1 = {keys['ONE']: 'value1'};

//works
var obj1 = {};
obj1[keys.ONE] = 'value1';

//also works
var key_one = keys.ONE;
var obj2 = {key_one: 'value1'};
</script>
Run Code Online (Sandbox Code Playgroud)

Guf*_*ffa 15

文字对象语法的限制是名称必须是文字的.由于名称可以指定为标识符和字符串,因此无法使用变量.

这将创建一个具有属性的对象n,而不是属性answer:

var n = 'answer';
var o = { n: 42 };
Run Code Online (Sandbox Code Playgroud)


nau*_*tur 6

在定义对象时,不能将变量用作键 {}

因此,它们被解释为字符串名称,并且只能包含可变名称的字符

objectname[anythingThatReturnsValue]='value1'; 是要走的路.

您可以生成一个字符串并解析它

var s='{"'+keys.ONE+'": "value1"}';
var obj=JSON.parse(s);
//or
s='var obj2='+s;
eval(s);
Run Code Online (Sandbox Code Playgroud)

以上两种方法都是在JavaScript中创建对象的不良做法,我不推荐它们.

  • @George - 要清楚:`var obj2 = {key_one:'value1'};`与`var obj2 = {"key_one":'value1'}相同;` - key_one将是字段的名称. (2认同)