如何在JavaScript中编写isNumber()?

How to write isNumber() in JavaScript?

本问题已经有最佳答案,请猛点这里访问。

我想应该是:

1
2
3
function isNumber(val) {
    return val === +val;
}

有更好的方法吗?

上一个引用

在javascript-isNumeric()中验证十进制数


1
2
3
4
var isNumber = function isNumber(value)
{
   return typeof value === 'number' && isFinite(value);
}

以上代码摘自《javascript——好的部分》一书。

/*回答更新开始-回复一些评论下面来自提问者和其他人*/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
var isNumber = function isNumber(value) {
   return typeof value === 'number' && isFinite(value);
}

var isNumberObject = function isNumberObject(n) {
    return (Object.prototype.toString.apply(n) === '[object Number]');
}

var isCustomNumber = function isCustomNumber(n){
    return isNumber(n) || isNumberObject(n);
}

console.log(isCustomNumber(new Number(5)));
console.log(isCustomNumber(new Number(5.2)));
console.log(isCustomNumber(new Number(5.5)));
console.log(isCustomNumber(new Number(-1)));
console.log(isCustomNumber(new Number(-1.5)));
console.log(isCustomNumber(new Number(-0.0)));
console.log(isCustomNumber(new Number(0.0)));
console.log(isCustomNumber(new Number(0)));
console.log(isCustomNumber(new Number(1e5)));

console.log(isCustomNumber(5));
console.log(isCustomNumber(5.2));
console.log(isCustomNumber(5.5));
console.log(isCustomNumber(-1));
console.log(isCustomNumber(-1.5));
console.log(isCustomNumber(-0.0));
console.log(isCustomNumber(0.0));
console.log(isCustomNumber(0));
console.log(isCustomNumber(1e5));

/*回复更新结束-回复一些评论下面来自提问者和其他人*/


如果不希望包含字符串,并且希望包含无穷大,您可以将参数的强制数字与参数进行比较:

1
2
3
function isNumber(n){
    return Number(n)=== n;
}

/测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[0, 1, 2, -1, 1.345e+17, Infinity, false, true, NaN, '1', '0'].map(function(itm){
    return itm+'= '+isNumber(itm);
});

// returned values
0= true
1= true
2= true
-1= true
134500000000000000= true
Infinity= true
false= false
true= false
NaN= false
'1'= false
'0'= false


1
2
3
4
function isNumber(val) {
        // negative or positive
        return /^[-]?\d+$/.test(val);
    }


1
2
3
function isNumber(val){
    return typeof val==='number';
}

我喜欢这个解决方案:

1
2
3
function isNumber(val) {
    return (val >=0 || val < 0);
}


如果您希望"23"是一个数字,那么

1
2
3
function isNumber(val) {
    return !isNaN(val);
}


如果我需要为API编写isNumber函数,我将使用:

1
2
3
function isNumber(val) {
    return !isNaN(val);
}

…但是我不会费心编写一个isNumber函数,因为我只使用isNaN函数。