乐趣区

深入理解JS中逻辑或(||)和逻辑与(&&)

先来看一个关于逻辑或的例子:
var b = 0
var a = b++ || b++
console.log(b) // 2
var c = ++b || ++b
console.log(a) // 1
console.log(c) // 3
console.log(b) // 3
关于 ++ b 和 b ++ 的区别,后 ++ 的运算等级没有赋值运算符(=)高,这里不再作过多的解释,
首先从全局来看,关于的 b 的运算总共执行了 4 次,每次都自身 +1,那么按道理来说,如果这些运算都执行了,b 的最后的值正常来说应该是 4,那为什么最后的结果是 3 呢?
关于逻辑或我自己总结如下:①、首先如果第一项的值不是 Boolean 值的话,会转为 Boolean 类型的,在数值上,0 和 - 0 在转为 Boolean 时为 false,其余为 true,在其他值上诸如 null,undefined,NaN,空 string 类型等会转为 false,这里不再作过多的解释
console.log(Boolean(NaN))               // false
console.log(Boolean(null))                // false
console.log(Boolean(undefined))      // false
console.log(Boolean(”))                    // false
console.log(Boolean(‘ 0’))                 // true
②、如果第一项的值为 true 时,则后面一项则不执行,返回的是第一项执行运算后的值
网上看到的是说如贵第一项为 true,返回的也是 true,这是不对的说法。
③、如果第一项的值为 false 时,则执行后面一项的运算,返回的是第二项执行运算后的值
再来看多一个例子,自己多动手尝试看看就明白了。
var b = 0
var a = (typeof b++) || b++
console.log(b) //1
var c = ++b || ++b
console.log(a) // number
console.log(c) // 2
console.log(b) // 2
————————–     来个分割线      ———————————- 看一个关于逻辑与的例子
var b = 0
var a = (typeof b++) && b++
console.log(b) // 2
var c = ++b && ++b
console.log(a) // 1
console.log(c) // 4
console.log(b) // 4
关于逻辑与我自己总结如下:
①、逻辑与和逻辑或一样,都需要把前后两项进行 Boolean 转换再比较②、如果第一项的值为 true 时,则执行后面一项的运算,返回的是第二项执行运算后的值③、如果第一项的值为 false 时,则后面一项则不执行,返回的是第一项执行运算后的值

退出移动版