JavaScript表达式,用括号括起来的逗号分隔

Ben*_*Ben 12 javascript

'use strict';

(true, false, 1);
Run Code Online (Sandbox Code Playgroud)

括号是否从多个构成表达式中创建单个表达式?

我以前没见过这种语法.

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

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
}
Run Code Online (Sandbox Code Playgroud)

Nik*_*off 15

在某些编程语言(包括c ++和js)中,逗号运算符代表"评估所有用逗号分隔的表达式并返回最后一个".例如:

var x = (true, false, 1);
console.log(x) // 1
Run Code Online (Sandbox Code Playgroud)

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

var i = 0;
var j = 0;
var x = (i++, j--);
console.log(i, j, x) // 1 -1 0
Run Code Online (Sandbox Code Playgroud)

该函数AddWaterMark基本上可以重写为:

function AddWatermark(controlName, defaultValue, cssValue) {
    if (document.getElementById(controlName).value == "") { 
        document.getElementById(controlName).value = defaultValue;    
        document.getElementById(controlName).className = cssValue;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我从来没有弄清楚,但 for 循环使用这种语法。[来源](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_o​​perator) (2认同)

Aln*_*tak 6

"括号是否用多个构成表达式创建单个表达式?"

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

因此:

e = (a = b, c = d)
Run Code Online (Sandbox Code Playgroud)

将执行两个内部分配,然后分配ce.


小智 5

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

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

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

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