首页 > 解决方案 > 什么是检查值是真值还是 0 的简洁方法?

问题描述

我试图简化检查索引值是否nullundefined打字稿中。

    const indexValue: number;
    if(!!indexValue || indexValue === 0) {
     // Do something
    }

由于0它是虚假的,因此似乎需要在条件中明确检查indexValue === 0.

如果有更清晰简洁的方法来做到这一点?

标签: javascripttypescript

解决方案


就在这里。由于这是一个索引值,因此您可能希望接受任何数字。这可能表明这typeof indexValue === "number"是正确的方法,因为这将拒绝nullundefined,但会接受0。但是,此条件也将接受其他不需要的值,例如NaNInfinity-Infinity,它们也都是数字。

值得庆幸的是,该语言为我们提供了一个内置函数,可以一次测试所有这些:isFinite(). 所以你的条件变成:

if (isFinite(indexValue)) {
    // ...
}

请注意,此函数将接受转换为有限数的字符串。还有Number.isFinite(),它只接受数字,但在 IE 中不支持。如果要拒绝所有字符串,则将isFinite()检查与typeof检查结合起来:

if (typeof indexValue === "number" && isFinite(indexValue)) {
    // ...
}

推荐阅读