"!!"或 if 将表达式进行强制转化为 bool 值的运算,运算结果为 true 或者 false
注意:以下进行布尔值运算是为 false
- undefined(未定义,找不到值时出现)
- Null(代表空值)
- False(布尔值的 false,字符串"false"布尔值为 true)
- 0、-0(字符串"0"布尔值为 true)
- NaN
- “”(双引号)或’'(单引号) (空字符串,中间有空格时也是 true)
逻辑或
console.log(true || true) // true
console.log(false || true) // true
console.log(true || false) // true
console.log(false || false || '') // ''
当第一项为 true 时,则返回第一项的值,后面的不做判断;
当第一项为 false 时,若后一项为 true,则返回后一项,若后一项为 false,则继续判断后一项,若全部为 false,则返回最后一项的值
其他用法:
let a={name:'苏'}
console.log(1|| false || '') // 1
console.log(0|| false || ' ') // ' '
console.log(0|| a.name || ' ') // 苏
甚至能和表达式一起使用:
console.log(10 < 9 || '学徒') //学徒
console.log(0 || '' || undefined || NaN || demo() + 1)//18
function demo() {
return 17
}
逻辑与
两个操作数都是真值时,与运算返回 true
,否则返回 false
console.log( true && true ); // true
console.log( false && true ); // false
console.log( true && false ); // false
console.log( false && false ); // false
多个操作数时:
let result = 6 && 8 && '苏苏'
let result1 = 6 && 0 && '苏苏'
let result2 = 0||undefined||NaN
console.log(result)//苏苏
console.log(result1)//0
console.log(result2)//NaN
与运算 &&
做了如下的运算:
- 从左到右依次计算操作数。
- 在处理每一个操作数时,都将其转化为布尔值。如果遇到某一个操作值为 false,则停止后面的判断,返回该操作数的初始值;
- 如果所有的操作数进行布尔运算都为 true,则返回最后一个操作数。
注意:
-
与运算
&&
的优先级比或运算||
要高
所以代码 a && b || c && d跟
&&表达式加了括号完全一样:
(a && b) || (c && d) `。 -
非运算符
!
的优先级在所有逻辑运算符里面最高,所以它总是在&&
和||
之前执行。.
逻辑非运算符
逻辑非运算符接受一个参数,并按如下运作:
- 将操作数转化为布尔类型:
true/false
。 - 返回相反的值。
**两个非运算 !!
有时候用来将某个值转化为布尔类型,等同于:Boolean
函数
console.log( Boolean("non-empty string") ); // true
console.log( Boolean(null) ); // false
空值合并运算符
这是一个 es 2020 新出的一个特性。
当一个值既不是 null
也不是 undefined
时,我们将其称为“已定义的(defined), 此时,空值合并运算符户籍返回该值,否则返回最后面的值