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