引用:

    1. JS 数据类型的转换 · 语雀
    1. 假值(falsy):在 Boolean 上下文中认定为 false 的值,JS 中只有 6 个 falsy:
      1. **undefined**
      2. **null**
      3. **false**
      4. **0****-0****0n**
      5. **NaN**
      6. **""****''**(空字符串)
    2. 真值(truthy):在 Boolean 上下文中被认定为 true 的值,判断标准很简单,非 falsy 的值都是 truthy
    3. 强制将一个值 x 转为 Boolean 值:**!!x****Boolean(x)**

    布尔值代表“真”和“假”两个状态。“真”用关键字true表示,“假”用关键字false表示。布尔值只有这两个值。

    下列运算符会返回布尔值:

    • 前置逻辑运算符: ! (Not)
    • 相等运算符:===!====!=
    • 比较运算符:>>=<<=

    如果 JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是除了下面这些值被转为false,称为 falsy(假值) 其他值都视为true,也称为 truthy(真值)。

    1. undefined
    2. null
    3. false
    4. 0-00n
    5. NaN
    6. ""''(空字符串)

    如果我们无法确定一个值 x 转换成布尔值后是 true 还是 false,有两种常见的做法加以验证:

    1. !!x
    2. Boolean(x)
    1. !!0 // false
    2. Boolean(0) // false
    3. !!'' // false
    4. Boolean('') // false

    布尔值往往用于程序流程的控制,请看一个例子。

    1. if ('') {
    2. console.log('true');
    3. }
    4. // 没有任何输出

    上面代码中,**if**命令后面的判断条件,预期应该是一个布尔值,所以 JavaScript 自动将空字符串,转为布尔值**false**,导致程序不会进入代码块,所以没有任何输出。

    注意,空数组(**[]**)和空对象(**{}**)对应的布尔值,都是**true**

    1. !![] // true
    2. !!{} // true
    1. if ([]) {
    2. console.log('true');
    3. }
    4. // true
    5. if ({}) {
    6. console.log('true');
    7. }
    8. // true