JavaScript中的“假”值是什么
原文:What is “Falsy” in JavaScript?
JavaScript的类型强制转换导致代码很容易出错,但如果理解了基本原理,可以省去很多无用的类型检查。本文简述了假值。
在JavaScript中,如果一个值,内置类型强制转换为false,那么称之为“假”值。例如,分析以下的if语句:
1 | if (v) { |
v不是以下值时,console.log()才能运行:
false00n: BigInt 0'': 空字符串nullundefinedNaN
这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,在空值检查中,比真假值更精确。