javascript 中的布尔运算符 && 和 ||
研究原因:布尔运算符&&和|| 的返回结果不一定是布尔值!
1.首先先介绍下常见的数据类型转化为bool后的值。
(常用地方)在if表达式中,javascript先把条件表达式转化为bool值再进行判断。
数据类型 转化为bool后的值
null false
undefined false
0 |(数字零) false
""(空字符串) false
Object true
function true
...
2.下面来介绍下逻辑与 && 逻辑或 || 的运算后的返回结果
逻辑与 &&
栗子:
var a = true, b = 123, c = null;
console.log(a && b); // 123
console.log(a && c); // null
var a1 = null, b1 = 123, c1 = true;
console.log(a1 && b1); //null
console.log(a1 && c1); //null
var a2 = false, b2 = 123, c2 = null;
console.log(a2 && b2); //false
console.log(a2 && c2); //false
由上面的结果可以看出,在逻辑与&&中,当左侧表达式为 真值,结果则为右侧表达式;当左侧表达式为 假值,结果则返回左侧表达式。
也就是
var i = "真值" && "任意值"; => i 结果为任意值
var i = "假值" && "任意值"; => i 结果为左侧假值 // 假值包括 null false 0 undefined 空字符串
逻辑或 ||
栗子:
var a1 = true, b1 = 123, c1 = null;
console.log (a1 && b1); // 123
console.log(a1 && c1); // null
console.log(a1 || b1) // true
console.log(a1 || c1) // true
var a2 = "shiping", b2 = 123, c2 = null;
console.log(a2 || b2); // "shiping"
console.log(a2 || c2); // "shiping"
var a3 = false, b3 = 123, c3 = null;
console.log(a3 || b3); // 123
console.log(a3 || c3); // null
var a4 = null, b4 = 123, c4 = null;
console.log(a4 || b4); // 123
console.log(a4 || c4); // null
由上面结果可以看出,逻辑或||中,但左侧表达式为 真值, 结果则返回左侧表达式;当左侧表达式为 假值,结果则返回右侧表达式。
var i = "真值" || "任意值"; =>i 结果为"真值"
var i = "假值" || "任意值"; =>i 结果为"任意值"
3.逻辑&&和|| 都属于短路操作
什么叫短路操作?即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值。
var found = true;
var result = (found && someUndefinedVariable); // 这里会发生错误
alert(result); // 这里不会执行
在上面的代码中,当执行逻辑与操作时会发生错误,因为变量soneUndefinedVariable没有声明,由于found为true,所以逻辑与会对变量
someUndefinedVariable求值,由于someUndefinedVariable没定义,所以会报错,如果found为false的话,则不会对someUndefinedVariable
进行求值,就有输出结果。(ps 不能在逻辑与中使用未定义的值)