关于JavaScript对象属性名称的问题

wei*_*lou 10 javascript

我有一个关于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>
Run Code Online (Sandbox Code Playgroud)

如果JavaScript对象的属性名称是有效的JavaScript标识符,则不需要对象属性名称的引号.

例如

({go_go: 'go'}); // OK
({go-go: 'go'}); // Fail
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,123aJavaScript名称无效,并且不会引用它.所以发生了错误.但123也是一个无效的JavaScript名称,也没有引用,为什么没有错误?我个人认为123必须引用.

谢谢!

Fel*_*ing 19

看看规格:

ObjectLiteral :
    { }
    { PropertyNameAndValueList }
    { PropertyNameAndValueList  ,}

PropertyNameAndValueList :
    PropertyAssignment
    PropertyNameAndValueList , PropertyAssignment

PropertyAssignment :
    PropertyName : AssignmentExpression
    get PropertyName ( ){ FunctionBody }
    set PropertyName ( PropertySetParameterList ){ FunctionBody }

PropertyName :  
    IdentifierName
    StringLiteral
    NumericLiteral

因此,属性名称可以是标识符名称,字符串或数字.123是一个数字而123a不是上面的数字.


Jam*_*mes 8

每个键值对的关键部分可以写为任何有效的JavaScript标识符,字符串(用引号括起来)或数字:

var x = {
    validIdentifier: 123,
    'some string': 456,
    99999: 789
};
Run Code Online (Sandbox Code Playgroud)

请参阅规范:http://bclary.com/2004/11/07/#a-11.1.5