function or(x, y) {
if (x) {
return x;
} else {
return y;
}
}
如果你传递一个真值作为x,它会返回x,也就是说,一个真值。因此,如果您稍后在if子句中使用它:
(function(x, y) {
var eitherXorY = x || y;
if (eitherXorY) {
console.log("Either x or y is truthy.");
} else {
console.log("Neither x nor y is truthy");
}
}(true/*, undefined*/));
你得到"Either x or y is truthy."。
如果x是假的,eitherXorY将是y。在这种情况下,如果y为真,你将得到"Either x or y is truthy.";否则你会得到"Neither x nor y is truthy"。
真正的问题
现在,当你知道||操作符是如何工作的,你可能就能自己弄清楚x = x || y是什么意思。如果x为真值,则x被赋值给x,因此实际上什么都不会发生;否则y被赋值给x。它通常用于定义函数中的默认形参。然而,它通常被认为是糟糕的编程实践,因为它防止你传递一个错误的值(不一定是undefined或null)作为参数。考虑下面的例子:
function badFunction(/* boolean */flagA) {
flagA = flagA || true;
console.log("flagA is set to " + (flagA ? "true" : "false"));
}