代码之家  ›  专栏  ›  技术社区  ›  user123444555621

在JavaScript语法中,什么是有效的左侧表达式?

  •  15
  • user123444555621  · 技术社区  · 14 年前

    好吧,我们都知道 有效的左侧表达式是什么。差不多吧*

    但是,从 the ECMA-Script standard

    LeftHandSideExpression :
        NewExpression
        CallExpression
    

    这只是定义上的错误,还是我在这里搞错了什么?我是说,这不是真的吗

    new Object = 1; // NewExpression AssignmentOperator PrimaryExpression
    function () { return foo; }() = 1;// CallExpression AssignmentOperator PrimaryExpression
    

    应该是有效的赋值表达式吗?


    LeftHandSideExpression :
        Identifier
        MemberExpression [ Expression ]
        MemberExpression . IdentifierName
        CallExpression [ Expression ]
        CallExpression . IdentifierName
    

    2 回复  |  直到 14 年前
        1
  •  13
  •   ChaosPandion    14 年前

    简明扼要地回答你的问题 LeftHandSideExpression 生产是有效的 LeftHandside表达式 .


    什么是有效的 LeftHandside表达式 也可转让?

    这个问题的答案是任何能解决问题的东西 Reference 这是规范中定义良好的概念。在你的例子中

    new Object = 1;
    

    new Object 是有效的 LeftHandside表达式 但这并不能解决一个问题 参考

    (new Object).x = 1;
    

    左手边是一个 MemberExpression . IdentifierName 根据规范,最后一步是:

    返回引用类型的值 ...


    1. 这是有效的参考资料吗?

    属性1在语法分析阶段确定,属性2在语义分析阶段确定。退房 更多细节。

    8.7参考规范类型


    看了你的建议之后,我相信它会去掉某些有效的表达方式 (注:我不宽恕这一点。)

    function OuterObj() {
        this.Name = "Outer";
        this.InnerObj = function() {
            this.Name = "Inner";
        }
    }
    
    var obj; (obj = new new OuterObj().InnerObj).Name = "Assigned";
    

    NewExpression 是很重要的

        2
  •  2
  •   user45398    7 年前

    这是一种可选的JavaScript语法,它只匹配有效的lefthandideexpressions,即实际可赋值的lefthandideexpressions。

    NewExpression :
        PrimaryExpression
        new NewExpressionQualifier Arguments
        new NewExpressionQualifier
    
    NewExpressionQualifier :
        NewExpressionQualifier Qualifier
        NewExpression
    
    CallExpression :
        NewExpression
        CallExpressionQualifier Arguments
    
    CallExpressionQualifier :
        CallExpression
        CallExpressionQualifier Qualifier
    
    LeftHandSideExpression :
        LeftHandSideExpression Qualifier
        CallExpression Qualifier
        Identifier
        ( LeftHandSideExpression )
        ( Expression , LeftHandSideExpression )
    
    Qualifier :
        . IdentifierName
        [ Expression ]
    

    对于选择关联的new或call表达式不明确的每个参数,应与最近的可能的新表达式相关联,否则新表达式将没有相应的参数。我认为这是JavaScript语法中同时存在NewExpression和MemberExpression nonterminal的原因之一。