Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解JavaScript中的对象初始值设定项符号_Javascript - Fatal编程技术网

理解JavaScript中的对象初始值设定项符号

理解JavaScript中的对象初始值设定项符号,javascript,Javascript,在ECMA-262中,我们有对象声明符号: ObjectLiteral : { } { PropertyNameAndValueList } { PropertyNameAndValueList , } PropertyNameAndValueList : PropertyAssignment PropertyNameAndValueList , PropertyAssignment PropertyAssignment : PropertyNam

在ECMA-262中,我们有对象声明符号:

ObjectLiteral :
    { }
    { PropertyNameAndValueList }
    { PropertyNameAndValueList , }
PropertyNameAndValueList :
    PropertyAssignment
    PropertyNameAndValueList , PropertyAssignment
PropertyAssignment :
    PropertyName : AssignmentExpression
    get PropertyName ( ) { FunctionBody }
    set PropertyName ( PropertySetParameterList ) { FunctionBody }
PropertyName :
    IdentifierName
    StringLiteral
    NumericLiteral
PropertySetParameterList :
    Identifier
< P> >,考虑下面的<代码> ObjutTrimeAuth/<代码>:<代码> {PROP:PROP}}<代码>。因此,我们有形式为
{PropertyName:AssignmentExpression}
的文本。现在很明显,
'prop'
AssignmentExpression
。根据AssignmentExpression

AssignmentExpression :
    ConditionalExpression 
    LeftHandSideExpression = AssignmentExpression 
    LeftHandSideExpression AssignmentOperator AssignmentExpression
问题:


为什么
'prop'
AssignmentExpression
?没有
AssignmentOperator
=
'prop'
肯定没有
条件表达式

这是一个
AssignmentExpression
,因为您可以编写:

{ prop: a = 'prop' }
或:

'prop'
不是
conditionalPression
当然

是的。条件句并不意味着它一定包含条件句,而是在语法层面上允许包含条件句,以实现顺序

下面是一个细分:

ConditionalExpression: LogicalORExpression (§11.12)
LogicalORExpression: LogicalANDExpression (§11.11)
LogicalANDExpression: BitwiseORExpression (§11.11)
BitwiseORExpression: BitwiseXORExpression (§11.10)
BitwiseXORExpression: BitwiseANDExpression (§11.10)
BitwiseANDExpression: EqualityExpression (§11.10)
EqualityExpression: RelationalExpression (§11.9)
RelationalExpression: ShiftExpression (§11.8)
ShiftExpression: AdditiveExpression (§11.7)
AdditiveExpression: MultiplicativeExpression (§11.6)
MultiplicativeExpression: UnaryExpression (§11.5)
UnaryExpression: PostfixExpression (§11.4)
PostfixExpression: LeftHandSideExpression (§11.3)
LeftHandSideExpression: NewExpression (§11.2)
NewExpression: MemberExpression (§11.2)
MemberExpression: PrimaryExpression (§11.2)
PrimaryExpression: Literal (§11.1)
Literal: StringLiteral (§7.8)
AssignmentExpression表示语言中几乎所有的表达式,而不是使用逗号运算符/标点符号的表达式

基本上,产生式规则具有运算符优先级和关联性

 AssignmentExpression 
 => ConditionalExpression                          (11.13)
  => LogicalORExpression                           (11.12)
   => LogicalANDExpression                         (11.11)
    => BitwiseORExpression                         (11.10)
     => BitwiseXORExpression                       (11.10)
      => BitwiseANDExpression                      (11.10)
       => EqualityExpression                       (11.10)
        => RelationalExpression                    (11.9)
         => ShiftExpression                        (11.8)
          => AdditiveExpression                    (11.7)
           => MultiplicativeExpression             (11.6)
            => UnaryExpression                     (11.5)
             => PostfixExpression                  (11.4)
              => LeftHandSideExpression            (11.3)
               => NewExpression                    (11.2)
                => MemberExpression                (11.2)
                 => PrimaryExpression              (11.2)
                  => Literal                       (11.1)
                   => StringLiteral                (7.8)
                    => ' SingleStringChars(opt) '  (7.8.4)

注意我们走得越深,优先级就越高。例如,您可能已经知道
*
的优先级高于
+
-
。在语法中指定优先级的一种非常常见的方法是为每一层运算符指定一个产生式规则,并明确指出(例如)“加法表达式”是一个或多个“乘法表达式”,由
+
-
分隔。根据这样的规则,解析器必须先处理乘法子表达式,然后才能尝试生成加法或减法表达式。

当然
{prop:'prop'}
属性名称和值列表
?@lonesomeday我很困惑,你能解释一下在我的
ObjectLiteral
中如何计算
'prop'
?在11.1.5中说,值不需要是literal;每次计算对象初始值设定项时,都会计算它们。但正如我在你的帖子中所理解的那样,
AssignmentExpression
可以是
Literal
对。可以,但不一定非得。很棒的解释!我很理解。非常感谢!:)
 AssignmentExpression 
 => ConditionalExpression                          (11.13)
  => LogicalORExpression                           (11.12)
   => LogicalANDExpression                         (11.11)
    => BitwiseORExpression                         (11.10)
     => BitwiseXORExpression                       (11.10)
      => BitwiseANDExpression                      (11.10)
       => EqualityExpression                       (11.10)
        => RelationalExpression                    (11.9)
         => ShiftExpression                        (11.8)
          => AdditiveExpression                    (11.7)
           => MultiplicativeExpression             (11.6)
            => UnaryExpression                     (11.5)
             => PostfixExpression                  (11.4)
              => LeftHandSideExpression            (11.3)
               => NewExpression                    (11.2)
                => MemberExpression                (11.2)
                 => PrimaryExpression              (11.2)
                  => Literal                       (11.1)
                   => StringLiteral                (7.8)
                    => ' SingleStringChars(opt) '  (7.8.4)