JavaScript中的“假”值是什么
原文:What is “Falsy” in JavaScript?
JavaScript的类型强制转换导致代码很容易出错,但如果理解了基本原理,可以省去很多无用的类型检查。本文简述了假值。
在JavaScript中,如果一个值,内置类型强制转换为false
,那么称之为“假”值。例如,分析以下的if语句:
1 | if (v) { |
v
不是以下值时,console.log()
才能运行:
false
0
0n
: BigInt 0''
: 空字符串null
undefined
NaN
这7个值就是JavaScript中的假值,其他任何值都是真值。
其中,非null
的对象总是真值,即便它的valueOf()
函数返回一个假值。
1 | function isFalsy(v) { |
建议
在if语句中用隐性的类型转换得到真/假值,是典型的混乱之源。大部分场景下,7个假值与你所需的判断是不匹配的。
例如,要实现一个检查字符串是否少于25个字符的函数。
1 | function checkLength(v) { |
出乎意料的是,checkLength('')
会抛出错误,因为空字符串是假值。应该像这样检查v
是不是字符串:
1 | function checkLength(v) { |
空值
除了检查真/假值,通常更多的是检查“空”值。一个常见的检查空值的例子是,在获取v
的属性时,确保不会报错:TypeError: Cannot read property 'xxx' of null
除了null
和undefined
,v
是其他值时访问v.prop
都不会报错,即使NaN.prop
也不会报错。
1 | const x = Number('abc'); |
检查v == null
等价于v === null || v === undefined
。也就是说,只有在值是null
或undefined
时,它才== null
。检查v == null
,在空值检查中,比真假值更精确。