“或”运算符的高级用法:
利用“或”运算符取得操作数的值:
result = value1 || value2 || value3;
在上面这样的情况下,“或”运算符是这样执行的:
l 从左到右依次计算操作数。
l 处理每一个操作数时,都将其转化为布尔值。如果结果是 true,就停止计算,返回这个操作数的初始值。
l 如果所有的操作数都被计算过(也就是,转换结果都是 false),则返回最后一个操作数。
返回的值是操作数的初始形式,不会做布尔转换。
也就是,一个或 "||" 运算的链,将返回第一个真值,如果不存在真值,就返回该链的最后一个值。
例子1:
alert( 1 || 0 ); // 1(1 是真值)
alert( true || 'abc' ); //(true 是真值)
alert( null || 1 ); // 1(1 是第一个真值)
alert( null || 0 || 1 ); // 1(第一个真值)
alert( undefined || null || 0 ); // 0(所有的转化结果都是 false,返回最后一个值)
例子2:通过“或”运算符获取表达式的第一个为真的值
let vara = null;
let varb = "John";
let varc = undefined;
let name = vara || varb || "unnamed"||varc;
alert( name ); // 选出了 “John” — 第一个真值
结果:
例子3:或运算的取值方式是短路取值,即从左向右进行运算,当出现第一个为真的值的时候,会立即停止运算并返回结果。
let x;
true || (x = 1);
alert(x);
let y;
false || (y = 1);
alert(y);
结果是: