逻辑运算符又称布尔运算符,最早的应用应该是在数字电路中,有“&” ,“|” ,“!”,这三种运算符;在编程语言中,“&”,“|”称为按位运算符,“&&”,“||”称为短路运算符,编程中的逻辑运算符有些值得注意的地方;下面就对JavaScript中的逻辑运算进行一些总结。


1,逻辑非(!)


console.group('逻辑非(!)')
             //操作数是一个对象返回true
             console.log(! {name:'Turing'})
             //操作数是一个空字符串返回false
             console.log(! '')
             //操作数是一个非空字符串返回true
             console.log(! 'Hello')
             //操作数是数值0,返回true
             console.log(! 0)
             //操作数是NaN,返回true
             console.log(! NaN)
             //操作数是undefined,返回true
             console.log(!undefined)
             //操作数是null,返回true
             console.log(! null)console.groupEnd()

TODO: 非运算的结果是布尔值,“!”运算之前会对操作数进行类型转换,空字符串,NaN,undefined,null,数值0都会被转化为布尔值false,其余的操作数会被转化为true


2,按位与(&)


console.group('按位与(&)')
             console.log(3 & 6)//2
             console.log(3 & '')//0
             console.log(3 & '5' )//1
             console.log('2' & '2') //2
             console.log('2s' & '2s') //0
             console.log({name:'Jobs'} & {name:'Turing'})//0
             console.log(true & true)//1
             console.log('Hello' & 'OK') //0
            console.log([3] & [3])//3
             console.log([3,3] & [3]) //0
            console.log(null & null) // 0
  console.groupEnd()

TODO:“&”运算的返回值是数字,按位与运算和数电中的与运算思想是一样的,是对二进制数进行运算;如果操作数是数字那么就对操作数进行二进制的与运算,例如3 & 6 ,相当于二进制 11 & 110 ,结果是二进制数10 ,打印输出的结果就是十进制数2;如果操作数是纯数字字符串,那么会被转化为数字去正常进行与运算,否则就变为0 ;如果操作数是数组对象时,那么当数组中仅有一个数字(或字符串数字)时也能正常转化为数字去进行运算,否则就会变为0;操作数是其他的对象时都会被变为0。


3,逻辑与(&&)




console.group('逻辑与&&')
             console.log({name:"Jobs"} && {name:"Turing"}) //Object { name: "Turing" }
             console.log(null && undefined) //null
             console.log([0] && {name:"Turing"}) //Object { name: "Turing" }
 
            console.log(3 && 5) //5 
console.groupEnd()


TODO :逻辑&&运算的返回值是操作数,根据操作数的(被转化为布尔值时的)布尔值来确定是返回前一个操作数还是后一个操作数,如果前一个数(转化为布尔值)是true,那么返回后一个操作数,否则返回前一个操作数(这里也体现了短路运算的内涵)。被视为false的操作数和非运算一样


4,逻辑或(||)


TODO:计算原理和逻辑与运算一样,返回的是操作数;若前一个(转化为布尔值)是true则返回前一个数,否则返回后一个数