每天务必做一点你所不愿意做的事情,这是一条宝贵的准则,它可以使你养成认真尽责而不以为苦的习惯。——马克.吐温
我们知道js
中如果使用:
1 | if(2){ |
可以看到if
中代码块执行了
这是因为JavaScript
在布尔值上下文中使用强制类型转换(coercion
)
而我们if
括号中表达式2
,由于为truthy
,也就是真值
所以被转换为了true
JavaScript 中的真值示例如下(将被转换为 true,
if
后的代码段将被执行):
1
2
3
4
5
6
7
8
9
10
11 if (true)
if ({})
if ([])
if (42)
if ("foo")
if (new Date())
if (-42)
if (3.14)
if (-3.14)
if (Infinity)
if (-Infinity)
反之,我们也有Falsy
在 JavaScript 中只有 8 个 falsy 值。
这意味着当 JavaScript 期望一个布尔值,并被给与下面值中的一个时,它总是会被当做 false。
false
false 关键字 0 数值 zero -0 数值 负 zero 0n 当 BigInt 作为布尔值使用时, 遵从其作为数值的规则. 0n
是 falsy 值.“”, ‘’, `` 这是一个空字符串 (字符串的长度为零). JavaScript 中的字符串可用双引号 **""**
, 单引号''
, 或 模板字面量 ```` 定义。null null - 缺少值 undefined undefined - 原始值 NaN NaN - 非数值 例子
JavaScript 中 falsy 值的例子 (在布尔值上下文中被转换为 false,从而绕过了
if
代码块):
1
2
3
4
5
6
7
8
9
10 if (false)
if (null)
if (undefined)
if (0)
if (0n)
if (NaN)
if ('')
if ("")
if (``)
if (document.all)逻辑与操作符 &&
如果第一个对象(译注:原文如此)是 falsy 值,则返回那个对象:
1
2
3 let pet = false && "dog";
// ↪ false