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)
在定义对象时,不能将变量用作键 {}
因此,它们被解释为字符串名称,并且只能包含可变名称的字符
该
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中创建对象的不良做法,我不推荐它们.