关于Javascript速记对象引用的问题

时间:2011-07-26 20:33:28

标签: javascript openlayers

我对javascript很新,我想知道在对象速记中引用键

所以我使用OpenLayers js库,许多对象构造函数将{options}作为设置不同变量,回调等的参数。

在我的代码中,我有一堆控制对象,用于操作地图和什么不是

    controls = {
        navigation   : new OpenLayers.Control.Navigation({'autoActivate' : false}),
        zoom_out_box : new OpenLayers.Control.ZoomBox({
            alwaysZoom  : true,
            out         : true
        }),
        ...     
    };

在他们的一些示例中,他们使用单引号作为键,而其他人则不使用{'ascending':false}{visibility: false}

我认为这可能与保留字或函数与变量有关,但我可以在缩放框中添加函数:

controls= {
        zoom_out_box : new OpenLayers.Control.ZoomBox({
            if      : function(e){alert('blah');}
        }),
       zoom_out_box_2 : new OpenLayers.Control.ZoomBox({
            'if'    : function(e){alert('blah');}
        })
};

我使用onlclick="controls.zoom_out_box.if(this)"对其进行测试,并且警报正常,我在萤火虫中没有任何警告或错误。

那引用的差异是什么?

2 个答案:

答案 0 :(得分:3)

您可以在JavaScript对象中使用非标识符作为键,在这种情况下,引号是必需的:

var obj = { 'not-an-identifier': 42 };

在引用标识符的情况下,它只是样式/偏好/约定的问题。

作为旁注,必须始终使用方括号/数组样式表示法(obj['not-an-identifier'])来访问非标识符,而不是点(.)表示法。

答案 1 :(得分:1)

currently accepted answer不正确:

  

您可以在JavaScript对象中使用非标识符作为键,在这种情况下,引号是必需的

如果使用数字文字作为属性名称,则不需要引号。

Unquoted property names / object keys in JavaScript,我对这个主题的写作:

  

如果属性名称是数字文字或a valid identifier name,则只能省略引号。

     

[...]

     

括号表示法可以安全地用于所有属性名称。

     

[...]

     

当属性名称是有效的标识符名称时,点符号只能

我还制作了一个工具,告诉您是否可以使用任何给定的属性名称而不带引号和/或带点符号。在mothereff.in/js-properties处尝试。

Screenshot