逻辑‘与和或’操作
- js 中的逻辑‘与和或’操作属于短路操作,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值。
- 以 逻辑与 为例, 第一操作数为false,则返回 false,不执行第二个操作数(即使第二个操作数 有错误)
var a = false
var result = (a && someUndefinedVar) // 没有发生错误,因为 someUndefinedVar 没有执行
var b = true
var result = (b && someUndefinedVar) // 发生错误: someUndefinedVar is no defined
- 同理对于 逻辑或, 第一操作数为true,则返回 true,不执行第二个操作数(即使第二个操作数 有错误)
<br >
- 逻辑‘与和或’操作可以适用于任何类型的操作数,而不仅仅是布尔值。
** 在有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值 **
// 以 逻辑与 为例
var obj1 = {
a: 'b'
}
var c = 'Halo'
var r1 = obj1 && c
console.log(r1) // r1 = c ,因为 obj1 转换为布尔值为 true, 则接着执行第二个操作数,结果返回第二个操作数
var t = true
var r2 = t && obj
console.log(r2) // r2 = obj1 ,根据笔记 2 返回 obj1
var obj2 = {
d: 'e'
}
var r3 = obj1 && obj2
console.log(r3) // r3 = obj2, 因为 obj1 转换为布尔值为 true,接着执行第二个操作数,返回 obj2
<br >
- 逻辑 **‘与’ ** 中的某一操作数为 null undefined NaN,则对应返回 null undefined NaN
- 若 逻辑操作 中既有 null 也有 NaN, 则根据短路操作先遇到谁就返回谁
// 例
var r = null && undefined
console.log(r) // r = null, 因为先遇到 null ,由于短路操作,第二操作数不执行,直接返回 null
<br >
- 逻辑 ‘或’ ** 中的两个操作数都**为 null undefined NaN,才返回 null undefined NaN
- 若 逻辑操作 中既有 null 也有 NaN, 则根据**笔记 2 **返回第二个操作数
// 例
var r = null || undefined
console.log(r) // r = undefined, 因为先遇到 null ,null 转化为布尔值为 false,所以接着执行第二操作数,根据笔记 2 返回第二操作数
<br >
网友评论