逻辑或的本质
result = a || b
-
从左到右依次计算操作数。
-
处理每一个操作数时,都将其转化为布尔值(Boolean);
-
如果结果是 true,就停止计算,返回这个操作数的初始值。
-
如果所有的操作数都被计算过(也就是,转换结果都是 false),则返回最后一个操作数。(返回的值都是初始的形式,不会转为boolean类型)
-
换句话说,一个或运算 || 的链,将返回第一个真值,如果不存在真值,就返回该链的最后一个值。
// 本质推导一: 之前的多条件是如何进行判断的
var chineseScore = 95
var mathScore = 99
// chineseScore > 90为true, 那么后续的条件都不会进行判断
if (chineseScore > 90 || mathScore > 90) {}
// 本质推导二: 获取第一个有值的结果
var info = "abc"
var obj = {name: "zhangsan"}
var message = info || obj || "我是默认值"
console.log(message.length)
逻辑与的本质
result = value1 && value2 && value3
- 从左到右依次计算操作数。
- 在处理每一个操作数时,都将其转化为布尔值(Boolean);
- 如果结果是 false,就停止计算,并返回这个操作数的初始值(一般不需要获取到初始值);
- 如果所有的操作数都被计算过(例如都是真值),则返回最后一个操作数。
- 换句话说,与运算 返回第一个假值,如果没有假值就返回最后一个值。
// 本质推导一: 逻辑与, 称之为短路与
var chineseScore = 80
var mathScore = 99
if (chineseScore > 90 && mathScore > 90) {}
// 本质推导二: 对一些对象中的方法进行有值判断
var obj = {
name: "zhangsan",
friend: {
name: "lisi",
eating: function() {
console.log("eat something")
}
}
}
// 调用eating函数
// obj.friend.eating()
obj && obj.friend && obj.friend.eating && obj.friend.eating()