【发布时间】:2011-02-21 19:45:39
【问题描述】:
请参考下面的代码,当我“注释”任何被注释掉的行时,它会导致“':'预期”的错误(在 IE 中)。那么我的结论是正确的,即无法提供对对象值的引用,作为字符串文字中的对象键;这严格来说是解释器/解析问题吗?与 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>
【问题讨论】:
-
顺便说一句
var key_one = keys.ONE; var obj2 = {key_one: 'value1'};不像你期望的那样工作。obj2的属性将是key_one而不是key.ONE的值,因此不是one。 -
请注意,尽管最后一个示例有效,但它创建了一个具有属性
key_one的对象,而不是属性keys.One。变量key_one与下一行的字面量对象无关。 -
知道了....这可能会令人困惑....它应该禁止所有“未引用”的字符串,或者取消引用引用,无论它们可能是什么
-
它们在 JSON 规范中已经被禁止。但是javascript对象可以有定义为
{somevar: 1, methodname:function(){ /*stuff*/ } }的方法,我想有人不喜欢把他的方法名放在引号里;) -
@George:或者他们可能在对象文字中禁止引用名称,就像其他一些语言一样......
标签: javascript object parsing object-literal