我正在编写一个需要测试传递的参数是否是数字的函数。我是新手,所以我只是写了这样的东西:
if (typeof num !== "number") {
return false;
}
我出于同样的目的查看了其他人的代码,他们只是有这样的东西:
if (!num) {
return false;
}
我觉得这很混乱。如果将零传递给函数, !num 不会评估为真吗?第二段代码如何可靠地测试 num 参数的类型?
我正在编写一个需要测试传递的参数是否是数字的函数。我是新手,所以我只是写了这样的东西:
if (typeof num !== "number") {
return false;
}
我出于同样的目的查看了其他人的代码,他们只是有这样的东西:
if (!num) {
return false;
}
我觉得这很混乱。如果将零传递给函数, !num 不会评估为真吗?第二段代码如何可靠地测试 num 参数的类型?
“如果将零传递给函数,不会
!num
评估为真吗?”
是的,如果NaN
或任何虚假的非数字值也是如此。
“第二段代码如何可靠地测试
num
参数的类型?”
它没有。它只测试值的“虚假性”。每个虚假值都会给语句一个true
结果if
。
这些值是:
false
""
0
NaN
null
undefined
任何其他值都将不符合if
条件。
(当然,如果您不使用 否定该值,所有这一切都会颠倒过来!
)
您可以使用该功能:isNaN(value)
您对第二条语句没有正确验证输入是否为数字是正确的。你不妨像这样改进你的检查:
if ((typeof(num) !== "number) || (isNaN(num) || (!isFinite(num) {
return false;
}