'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)
"括号是否用多个构成表达式创建单个表达式?"
不,这是逗号.逗号运算符计算它两侧的表达式,并返回右侧.
因此:
e = (a = b, c = d)
Run Code Online (Sandbox Code Playgroud)
将执行两个内部分配,然后分配c给e.
小智 5
我猜其他答案很好地解释了逗号,并且Nikola的答案还向您展示了由于其短路评估,如何将逻辑和运算符&&用作if语句的替代项。
至于括号,它们只是改变了运算符的优先级,因为逗号运算符的优先级自然很低。
a && b, c将被解释为(a && b), c,即if(a)b;c
a && (b, c) 是 if(a){b;c}