取反运算符(!)
!!!!先来说一下取反运算符 ! 的用法。
本来 ! 的作用是将boolean类型取反,即true和false的相互转化;
!true
// false
!false
// true
同时 ! 的后面可以跟非boolean其他的数据类型,对于非布尔值,取反运算符会将其转为布尔值;
除了以下5个值经过 ! 过后的结果为true,其他的全部都是为false
undefined
null
0
NaN
- 空字符串(
''
)
!undefined // true
!null // true
!0 // true
!NaN // true
!"" // true
!555 // false
!'I love js' // false
![] // false
!{} // false
//所以我们经常会这样去写if的判断条件
if(!x){}
且运算符(&&)
它的运算规则是:如果第一个运算子的布尔值为true
,则返回第二个运算子的值(注意是值,不是布尔值);如果第一个运算子的布尔值为false
,则直接返回第一个运算子的值,且不再对第二个运算子求值
't' && '' // ""
't' && 'f' // "f"
't' && (1 + 2) // 3
'' && 'f' // ""
'' && '' // ""
let x = 1;
(1 - 1) && ( x += 1) // 0
x // 1
(1 + 1) && ( x +=1 ) // 2
x //2
或运算符(||)
或运算符(||
)也用于多个表达式的求值。它的运算规则是:如果第一个运算子的布尔值为true
,则返回第一个运算子的值,且不再对第二个运算子求值;如果第一个运算子的布尔值为false
,则返回第二个运算子的值。
't' || '' // "t"
't' || 'f' // "t"
'' || 'f' // "f"
'' || '' // ""
let x = 1;
true || (x = 2) // true
x // 1
false || (x = 2) // 2
x // 2
三元条件运算符(?:)
(表达式1 ? 表达式2 : 表达式3) 如果第一个表达式的布尔值为true
,则返回第二个表达式的值,否则返回第三个表达式的值。
true ? 'hello' : 'world' // "hello"
false ? 'hello' : 'world' // "world"
't' ? 'hello' : 'world' // "hello"
0 ? 'hello' : 'world' // "world"
学习缺漏,记录一下