这是javascript中对象的标准?

use*_*729 3 javascript syntax object

{id:1,name:'test'}
Run Code Online (Sandbox Code Playgroud)

要么

{'id':1,'name':'test'}
Run Code Online (Sandbox Code Playgroud)

我看过他们两次都用了很多次,现在我很困惑!

CMS*_*CMS 11

在JavaScript中,这两种方式几乎相同,您可以使用两种方式,但是使用不带引号的密钥版本,您无法使用保留关键字的名称定义属性,例如:

// valid
var obj = {
  'for': 'test'
};

// SyntaxError
var obj = {
  for: 'test'
};
Run Code Online (Sandbox Code Playgroud)

这就是为什么JSON标准允许spec仅使用引用键的原因.

编辑:好的,现在让我们看看为什么.

Object初始值设定项的语法按以下方式定义:

ObjectLiteral :
    {}
    { PropertyNameAndValueList }

PropertyNameAndValueList :
    PropertyName : AssignmentExpression 
    PropertyNameAndValueList , PropertyName : AssignmentExpression 

属性名令牌可以是:

PropertyName :
    Identifier 
    StringLiteral 
    NumericLiteral

如果它是一个标识符,它的规范非常清楚明确,它不能是保留字,因为:

7.5.1 Reserved Words
Description

Reserved words cannot be used as identifiers.

并且,标识符语法的第一个定义是:

Identifier ::
    IdentifierName but not ReservedWord

  • +1 CMS,很棒的答案.@unknown你不能使用没有引号的任何保留字.这是给你参考的列表:https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Reserved_Words (2认同)