逻辑‘与和或’操作
js 中的逻辑‘与和或’操作属于短路操作,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值。
以 逻辑与 为例, 第一操作数为false,则返回 false,不执行第二个操作数(即使第二个操作数 有错误)
1
2
3
4var a = false
var result = (a && someUndefinedVar) // 没有发生错误,因为 someUndefinedVar 没有执行
var b = true
var result = (b && someUndefinedVar) // 发生错误: someUndefinedVar is no defined同理对于 逻辑或, 第一操作数为true,则返回 true,不执行第二个操作数(即使第二个操作数 有错误)
- 逻辑‘与和或’操作可以适用于任何类型的操作数,而不仅仅是布尔值。
在有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18// 以 逻辑与 为例
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
- 逻辑 ‘与’ 中的某一操作数为 null undefined NaN,则对应返回 null undefined NaN
- 若 逻辑操作 中既有 null 也有 NaN, 则根据短路操作先遇到谁就返回谁
1
2
3// 例
var r = null && undefined
console.log(r) // r = null, 因为先遇到 null ,由于短路操作,第二操作数不执行,直接返回 null
- 若 逻辑操作 中既有 null 也有 NaN, 则根据短路操作先遇到谁就返回谁
- 逻辑 ‘或’ 中的两个操作数都为 null undefined NaN,才返回 null undefined NaN
- 若 逻辑操作 中既有 null 也有 NaN, 则根据笔记 2 返回第二个操作数
1
2
3// 例
var r = null || undefined
console.log(r) // r = undefined, 因为先遇到 null ,null 转化为布尔值为 false,所以接着执行第二操作数,根据笔记 2 返回第二操作数
- 若 逻辑操作 中既有 null 也有 NaN, 则根据笔记 2 返回第二个操作数
注:以上知识不建议用在日常代码中, 对于一个大项目,进行迭代,你就要回去看自己的代码,而以上知识不常用,这样写以后 debug 会就不容易
最好的写法是,直接明了的,如:
1 | if(condition){ |
这样即好理解,也容易 debug