逻辑运算符又称布尔运算符,最早的应用应该是在数字电路中,有“&” ,“|” ,“!”,这三种运算符;在编程语言中,“&”,“|”称为按位运算符,“&&”,“||”称为短路运算符,编程中的逻辑运算符有些值得注意的地方;下面就对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则返回前一个数,否则返回后一个数