我对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)"
对其进行测试,并且警报正常,我在萤火虫中没有任何警告或错误。
那引用的差异是什么?
答案 0 :(得分:3)
您可以在JavaScript对象中使用非标识符作为键,在这种情况下,引号是必需的:
var obj = { 'not-an-identifier': 42 };
在引用标识符的情况下,它只是样式/偏好/约定的问题。
作为旁注,必须始终使用方括号/数组样式表示法(obj['not-an-identifier']
)来访问非标识符,而不是点(.
)表示法。
答案 1 :(得分:1)
您可以在JavaScript对象中使用非标识符作为键,在这种情况下,引号是必需的
如果使用数字文字作为属性名称,则不需要引号。
从Unquoted property names / object keys in JavaScript,我对这个主题的写作:
如果属性名称是数字文字或a valid identifier name,则只能省略引号。
[...]
括号表示法可以安全地用于所有属性名称。
[...]
当属性名称是有效的标识符名称时,点符号只能 。
我还制作了一个工具,告诉您是否可以使用任何给定的属性名称而不带引号和/或带点符号。在mothereff.in/js-properties处尝试。