JavaScript OR (||) 变量赋值说明

给定这个 JavaScript 的片段...

var a;
var b = null;
var c = undefined;
var d = 4;
var e = 'five';

var f = a || b || c || d || e;

alert(f); // 4

有人可以向我解释这种技术叫什么吗(我最好的猜测是在这个问题的标题中!)?它是如何/为什么工作?

我的理解是,变量将被分配第一个变量的最接近的值(从左到右),该变量的值既不为空也不未定义,但我没有设法找到太多关于这种技术的参考资料,并且已经看到它被大量使用。f

另外,这种技术是特定于JavaScript的吗?我知道在PHP中做类似的事情会导致有一个真正的布尔值,而不是它本身的值。fd


答案 1

有关说明,请参阅短路评估。这是实现这些运算符的常用方法;它不是JavaScript独有的。


答案 2

这样做是为了分配一个默认值,在本例中,如果变量是 falsy,则为 的值。yx

JavaScript 中的布尔运算符可以返回操作数,而不像其他语言那样总是返回布尔值结果。

逻辑 OR 运算符 () 返回其第二个操作数的值(如果第一个操作数是 falsy),否则返回第一个操作数的值。||

例如:

"foo" || "bar"; // returns "foo"
false || "bar"; // returns "bar"

Falsy 值是在布尔上下文中使用时强制使用的值,它们是 、 、 、 一个空字符串,当然。false0nullundefinedNaNfalse