3

我正在编写一个需要测试传递的参数是否是数字的函数。我是新手,所以我只是写了这样的东西:

if (typeof num !== "number") {
    return false;
}

我出于同样的目的查看了其他人的代码,他们只是有这样的东西:

if (!num) {
    return false;
}

我觉得这很混乱。如果将零传递给函数, !num 不会评估为真吗?第二段代码如何可靠地测试 num 参数的类型?

4

4 回答 4

3

“如果将零传递给函数,不会!num评估为真吗?”

是的,如果NaN或任何虚假的非数字值也是如此。

“第二段代码如何可靠地测试num参数的类型?”

它没有。它只测试值的“虚假性”。每个虚假值都会给语句一个true结果if

这些值是:

  • false
  • ""
  • 0
  • NaN
  • null
  • undefined

任何其他值都将不符合if条件。

(当然,如果您不使用 否定该值,所有这一切都会颠倒过来!

于 2012-12-12T18:17:29.213 回答
0

您可以使用该功能:isNaN(value)

于 2012-12-12T18:23:44.213 回答
0

您对第二条语句没有正确验证输入是否为数字是正确的。你不妨像这样改进你的检查:

if ((typeof(num) !== "number) || (isNaN(num) || (!isFinite(num) {

    return false;  

}

于 2012-12-12T18:24:11.177 回答
0

您是正确的,这不是有效的代码行。这是测试 正确的代码是:

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

本答案中所述

于 2012-12-12T18:27:39.070 回答