2011-04-26 57 views
5

可以永远存在的差异: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'; 
} 

为了安全起见,我是否应该始终使用我的财产名称字符串?

+0

看一看[这个问题](http://stackoverflow.com/questions/2348867/why-are-s ome-object-literal-properties-quoted-and-others-not) – Flash 2011-04-26 02:53:30

回答

3

我几乎从不指定任何超出a-zA-Z的东西作为我的密钥,所以我不担心字符,如@。如果因为任何原因你真的需要这些角色,那么确定继续并使用引号。

如果肯定的关键词是一个reserved word甚至远程认为它可能是,只是把它包在引号和安全..否则,只是去quoteless和节省打字时间。

与您的密钥具有相同名称的变量绝对没有影响,因为它的字面意义。

var hello = 'god'; 
({hello:2})['hello'] // 2 
1

在对象文字中,可以使用字符串文字(带引号)或标识符(不带引号)。在第一种情况下,您可以使用您喜欢的任何字符,而在第二种情况下,您必须遵循ECMAScript spec中规定的标识符规则。使用点符号属性访问器时适用相同的标识符规则。简化概述:

  • 标识符必须以字母开头,_$(两者也可以在任何地方出现在标识符)
  • 的第一个字符之后,更多的字符是允许的,包括数字
  • 标识符不能是保留字(newvarfunctiondelete等)
+0

为什么不是这个答案upvoted更多? – 2017-03-16 21:26:12

相关问题