我对JavaScript对象属性名称有疑问。请查看以下代码:
<!DOCTYPE html>
<meta charset="UTF-8">
<title>An HTML5 document</title>
<script>
var obj = {
123: 'go' // 123 is not a valid JavaScript name. No error here.
};
var obj2 = {
123a: 'go' // An Error occurred.
};
</script>
如果JavaScript对象的属性名称是有效的JavaScript标识符,则不需要对象属性名称的引号。
E.g。
({go_go: 'go'}); // OK
({go-go: 'go'}); // Fail
在上面的代码中,123a
是无效的JavaScript名称,并且不会被引用。所以发生了错误。但123
也是一个无效的JavaScript名称,也没有引用,为什么这里没有错误?我个人认为必须引用123
。
谢谢!
答案 0 :(得分:19)
ObjectLiteral : { } { PropertyNameAndValueList } { PropertyNameAndValueList ,} PropertyNameAndValueList : PropertyAssignment PropertyNameAndValueList , PropertyAssignment PropertyAssignment : PropertyName : AssignmentExpression get PropertyName ( ){ FunctionBody } set PropertyName ( PropertySetParameterList ){ FunctionBody } PropertyName : IdentifierName StringLiteral NumericLiteral
因此,属性名称可以是标识符名称,字符串或数字。 123
是一个数字,而123a
不是上述数字。
答案 1 :(得分:8)
每个键值对的关键部分可以写成任何有效的JavaScript标识符,字符串(用引号括起来)或 数字 :
var x = {
validIdentifier: 123,
'some string': 456,
99999: 789
};
答案 2 :(得分:0)
123
本身不是无效的属性名称。任何非字符串的属性名称都是使用toString
方法对字符串进行类型转换。