||(或)运算符寻找第一个真值
在JavaScript中,||(或)运算符还有扩展的算法。
result = value1 || value2 || value3;
或运算符 || 做了如下的事情:
- 从左到右依次计算操作数。
- 处理每一个操作数时,都将其转化为布尔值。如果结果是 true,就停止计算,返回这个操作数的初始值。
- 如果所有的操作数都被计算过(也就是,转换结果都是 false),则返回最后一个操作数。
返回的值是操作数的初始形式,不会做布尔转换。
也就是,一个或 “||” 运算的链,将返回第一个真值,如果不存在真值,就返回该链的最后一个值。
几个例子
alert( 1 || 0 ); // 1(1 是真值)
alert( null || 1 ); // 1(1 是第一个真值)
alert( null || 0 || 1 ); // 1(第一个真值)
alert( undefined || null || 0 ); // 0(所有的转化结果都是 false,返回最后一个值)
&&(与)运算符寻找第一个假值
在JavaScript中,&&(与)运算符同样有扩展的算法。
result = value1 && value2 && value3;
与运算 && 做了如下的事:
- 从左到右依次计算操作数。
- 将处理每一个操作数时,都将其转化为布尔值。如果结果是 false,就停止计算,并返回这个操作数的初始值。
- 如果所有的操作数都被计算过(也就是,转换结果都是 true),则返回最后一个操作数。
换句话说,与运算符返回第一个假值,如果没有假值就返回最后一个值。
上面的规则和或运算很像。区别就是与运算返回第一个假值而或操作返回第一个真值。
几个例子
// 如果第一个运算符是真值,
// 与操作返回第二个操作数:
alert( 1 && 0 ); // 0
alert( 1 && 5 ); // 5
// 如果第一个运算符是假值,
// 与操作直接返回它。第二个操作数被忽略
alert( null && 5 ); // null
alert( 0 && "no matter what" ); // 0
我们也可以在一行代码上串联多个值。查看第一个假值是否被返回:
alert( 1 && 2 && null && 3 ); // null
如果所有的值都是真值,最后一个值将会被返回:
alert( 1 && 2 && 3 ); // 3,最后一个值
与