2011-07-26 93 views
1

的Javascript速记对象的报价我敢新的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}

我想,也许它与保留字或函数来做VS变量,但我可以添加功能,我缩放框:

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)"测试它,它提醒很好,我没有得到任何警告或萤火虫错误。

那么报价有什么区别?

+1

http://stackoverflow.com/questions/2348867/why-are-some-object-literal-properties-quoted-and-others-not –

回答

3

可以使用非标识符为JavaScript对象键,在这种情况下,需要引号:

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

在一个标识符被引用的情况下,它只是一个风格/偏好的事/惯例。

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

1

currently accepted answer是不正确的:

可以使用非标识符为JavaScript对象键,在这种情况下,需要使用引号

,如果你的报价并不需要使用数字文字作为属性名称。

Unquoted property names/object keys in JavaScript,关于这个问题我写了:如果属性名称是数字文字或a valid identifier name

行情只能被省略。

[...]

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

[...]

圆点符号可以被当属性名称是有效的标识符名称使用。

我也做了一个工具,它会告诉你,如果任何给定的属性名称可以使用不带引号和/或点表示法。尝试在mothereff.in/js-properties

Screenshot