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

时间:2014-08-13 07:21:22

标签: javascript

'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
}

3 个答案:

答案 0 :(得分:12)

在某些编程语言(包括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;
    }
}

答案 1 :(得分:6)

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

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

因此:

e = (a = b, c = d)

执行两项内部分配,然后将c分配给e

答案 2 :(得分:5)

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

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

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

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