一 &&和||的区别
1.&&
只要"&&"前面为false,无论"&&"后面是true还是false,都返回"&&"前面的值;
只要"&&"前面为true,无论"&&"后面是true还是false,都返回"&&"后面的值。
console.log(false && true) //打印false
console.log(false && null) //打印false
console.log(true && 1) //打印1
console.log(true && false) //打印false
"&&"可以理解为获取表达式中的第一个false值对象,如果没有false值对象,则返回最后一个对象。
妙用列子:
if(a=true){
console.log(a等于true)
}
可以写成:a && console.log(a等于true)
2.||
只要"||"前面为true,无论"||"后面是true还是false,都返回"||"前面的值;
只要"||"前面为false,无论"||"后面是true还是false,都返回"||"后面的值。
console.log(true || 1) //打印true
console.log(true || 0) //打印true
console.log(false || 1) //打印1
console.log(false || 0) //打印0
"||"可以理解为获取表达式中的第一个true值对象,如果没有true值对象,则返回最后一个对象。
3.JS中非bool对象的bool值
在JS的非bool对象中,只有null、undefined、""、NaN、0会被判定为false,其他的全部是true。
for (let i of [null, undefined, '', 0, NaN]) {
console.log(!!i) //全部打印false
}
二 !和!!的区别及用法
js中!的用法是比较灵活的,它除了做逻辑运算常常会用!做类型判断,可以用!与上对象来求得一个布尔值,
1、!可将变量转换成boolean类型,null、undefined和空字符串取反都为false,其余都为true。
!null=true
!undefined=true
!''=true
!100=false
!'abc'=false
2、!!常常用来做类型判断,在第一步!(变量)之后再做逻辑取反运算,在js中新手常常会写这样臃肿的代码:
判断变量a为非空
,未定义
或者非空串
才能执行方法体的内容
var a;
if(a!=null&&typeof(a)!=undefined&&a!=''){
//a有内容才执行的代码
}
实际上我们只需要写一个判断表达:
if(!!a){
//a有内容才执行的代码...
}