引用:
- 假值(falsy):在 Boolean 上下文中认定为 false 的值,JS 中只有 6 个 falsy:
**undefined**
**null**
**false**
**0**
、**-0**
、**0n**
**NaN**
**""**
或**''**
(空字符串)
- 真值(truthy):在 Boolean 上下文中被认定为 true 的值,判断标准很简单,非 falsy 的值都是 truthy
- 强制将一个值 x 转为 Boolean 值:
**!!x**
、**Boolean(x)**
布尔值代表“真”和“假”两个状态。“真”用关键字true
表示,“假”用关键字false
表示。布尔值只有这两个值。
下列运算符会返回布尔值:
- 前置逻辑运算符:
!
(Not) - 相等运算符:
===
,!==
,==
,!=
- 比较运算符:
>
,>=
,<
,<=
如果 JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是除了下面这些值被转为false
,称为 falsy(假值) 其他值都视为true
,也称为 truthy(真值)。
undefined
null
false
0
、-0
、0n
NaN
""
或''
(空字符串)
如果我们无法确定一个值 x
转换成布尔值后是 true 还是 false,有两种常见的做法加以验证:
!!x
Boolean(x)
!!0 // false
Boolean(0) // false
!!'' // false
Boolean('') // false
布尔值往往用于程序流程的控制,请看一个例子。
if ('') {
console.log('true');
}
// 没有任何输出
上面代码中,**if**
命令后面的判断条件,预期应该是一个布尔值,所以 JavaScript 自动将空字符串,转为布尔值**false**
,导致程序不会进入代码块,所以没有任何输出。
注意,空数组(**[]**
)和空对象(**{}**
)对应的布尔值,都是**true**
。
!![] // true
!!{} // true
if ([]) {
console.log('true');
}
// true
if ({}) {
console.log('true');
}
// true