如何创建一个函数来检查参数是否为数字并让它接受未定义的参数?

时间:2013-12-11 07:54:24

标签: javascript

我有以下功能:

    isNumber: function (num) {
        // Return false if num is null or an empty string
        if (num === null || (typeof num === "string" && num.length === 0)) {
            return false;
        }
        var rtn = !isNaN(num)
        return rtn;

    },

如果尚未定义num,这会给我一个问题。当num未定义时,如何让它返回false?

4 个答案:

答案 0 :(得分:1)

null进行比较时,您可以使用“宽松”比较:

num == null

true如果numundefinednull(且仅限于此),则为num == null || num === ''

您还可以简化字符串比较,以便整体测试:

{{1}}

答案 1 :(得分:0)

替换

if (num === null || (typeof num === "string" && num.length === 0))

if (num === null || typeof num === "undefined" || (typeof num === "string" && num.length === 0))

如您所见,新条件还会处理numundefined的情况。

答案 2 :(得分:0)

您可以通过测试传递给函数的arguments数组来检查是否没有值传递给函数;所以,如果arguments.length=0,那么没有任何参数传递给函数,并且num将不会被定义。

您还可以对num !== undefined && num !== null进行进一步检查(请注意,使用非标识运算符!==而不是非等号运算符!=)。

相反,您可以检查一下,如果您解析数字,那么它是一个有效的非无限数字:

isNumber: function (num) {
    if ( arguments.length == 0 )
    {
        return false;
    }
    return !isNaN(parseFloat(num))&&isFinite(num);
}

检查是否:

  • parseFloat(num)评估为有效数字;如果
  • isFinite(num) - 该有效数字不是正数或负数无穷大。

如果这符合您的条件,那么您不需要进行第一次检查(因为parseFloat(undefined)返回NaN)并且可以将功能简化为:

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

答案 3 :(得分:0)

请参阅此answer

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

alert(isNumber());            //false
alert(isNumber(10));          //true
alert(isNumber(null));        //false
alert(isNumber(undefined));   //false
</script>