【问题标题】:JavaScript expressions, comma delimited within parentheses [duplicate]JavaScript 表达式,括号内用逗号分隔 [重复]
【发布时间】:2014-10-06 11:13:45
【问题描述】:
'use strict';

(true, false, 1);

括号是否从多个组成表达式中创建一个表达式?

我以前没见过这种语法。

编辑:引起兴趣的原始代码:

function AddWatermark(controlName, defaultValue, cssValue) {
    document.getElementById(controlName).value == "" 
    && 
    (document.getElementById(controlName).value = defaultValue, document.getElementById(controlName).className = cssValue); //I am interested in this syntax on the RHS of the logical AND operator
}

【问题讨论】:

  • 那是什么???向我们展示更多细节...只是调用 (true) 没有意义...
  • 我怀疑这是一种缩小技术
  • 逗号是运算符。
  • 我想知道表达式是如何计算的。
  • @C-linkNepal 不,该表达式中没有任何条件

标签: javascript


【解决方案1】:

在某些编程语言(包括c++和js)中,逗号操作符代表“计算所有用逗号分隔的表达式并返回最后一个”。例如:

var x = (true, false, 1);
console.log(x) // 1

这是另一个向您展示表达式被评估的例子:

var i = 0;
var j = 0;
var x = (i++, j--);
console.log(i, j, x) // 1 -1 0

函数AddWaterMark本质上可以改写为:

function AddWatermark(controlName, defaultValue, cssValue) {
    if (document.getElementById(controlName).value == "") { 
        document.getElementById(controlName).value = defaultValue;    
        document.getElementById(controlName).className = cssValue;
    }
}

【讨论】:

    【解决方案2】:

    “括号是否从多个组成表达式中创建一个表达式?”

    不,这是逗号。逗号运算符计算它两边的表达式,并返回右边。

    因此:

    e = (a = b, c = d)
    

    会执行两个内部赋值,然后将c赋值给e

    【讨论】:

      【解决方案3】:

      我猜其他答案很好地解释了逗号,Nikola 的答案还向您展示了逻辑和运算符 && 由于其短路评估而被用作 if 语句的替代。

      至于括号 - 它们只是改变运算符的优先级,因为逗号运算符的优先级自然很低。

      a && b, c 将被解释为(a && b), c,即if(a)b;c

      a && (b, c)if(a){b;c}

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-29
        • 1970-01-01
        • 1970-01-01
        • 2017-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多