JavaScript对象字面:属性名称作为字符串与 “原始”
可以永远存在的差异:JavaScript对象字面:属性名称作为字符串与 “原始”
var x = {
hello: 'world'
};
和
var x = {
'hello': 'world'
};
?
也就是说,在什么情况下,赋予属性名称作为字符串的结果与将其作为“原始”名称的结果不同?例如,我知道var x = {}; x['@£$%'] = 'bling!';
是有效的(因为任何字符串都可以是属性),但[email protected]£$% = 'bling!'
不起作用。也不会语言的关键字或保留的关键字作为属性名称(所以var x = {for: 'good', class: 'y'};
将无法正常工作。
还有别的吗?
例如,如果
var hello = 'goodbye';
在上面的例子中定义?还是什么否则,像
function hello() {
return 'goodbye';
}
?
为了安全起见,我是否应该始终使用我的财产名称字符串?
我几乎从不指定任何超出a-zA-Z
的东西作为我的密钥,所以我不担心字符,如@
。如果因为任何原因你真的需要这些角色,那么确定继续并使用引号。
如果肯定的关键词是一个reserved word甚至远程认为它可能是,只是把它包在引号和安全..否则,只是去quoteless和节省打字时间。
与您的密钥具有相同名称的变量绝对没有影响,因为它的字面意义。
var hello = 'god';
({hello:2})['hello'] // 2
在对象文字中,可以使用字符串文字(带引号)或标识符(不带引号)。在第一种情况下,您可以使用您喜欢的任何字符,而在第二种情况下,您必须遵循ECMAScript spec中规定的标识符规则。使用点符号属性访问器时适用相同的标识符规则。简化概述:
- 标识符必须以字母开头,
_
或$
(两者也可以在任何地方出现在标识符) - 的第一个字符之后,更多的字符是允许的,包括数字
- 标识符不能是保留字(
new
,var
,function
,delete
等)
为什么不是这个答案upvoted更多? – 2017-03-16 21:26:12
看一看[这个问题](http://stackoverflow.com/questions/2348867/why-are-s ome-object-literal-properties-quoted-and-others-not) – Flash 2011-04-26 02:53:30