我正在尝试简化打字稿中索引值是否为 null
或 undefined
的检查。
const indexValue: number;
if(!!indexValue || indexValue === 0) {
// Do something
}
由于 0
是假的,似乎需要在带有 indexValue === 0
的条件中明确检查它。
是否有更清晰简洁的方法来做到这一点?
答案 0 :(得分:0)
是的,有。由于这是一个索引值,大概您愿意接受任何数字。这可能表明 typeof indexValue === "number"
是正确的方法,因为这将拒绝 null
和 undefined
,但会接受 0
。但是,此条件也会接受其他不需要的值,例如 NaN
、Infinity
和 -Infinity
,它们也是数字。
幸运的是,该语言为我们提供了一个内置函数,可以一次测试所有这些:isFinite()
。所以你的条件变成:
if (isFinite(indexValue)) {
// ...
}
请注意,此函数将接受转换为有限数字的字符串。还有 Number.isFinite()
,它只接受数字,但在 IE 中不受支持。如果您想拒绝所有字符串,请将 isFinite()
检查与 typeof
检查结合起来:
if (typeof indexValue === "number" && isFinite(indexValue)) {
// ...
}