先来看一个关于逻辑或的例子:javascript
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呢?java
①、首先 若是第一项的值不是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
-------------------------- 来个分割线 ----------------------------------
看一个关于逻辑与的例子code
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时, 则后面一项则不执行,返回的是第一项执行运算后的值