如何在JavaScript中编写isNumber()?

nat*_*ing 1 javascript

我的猜测是:

function isNumber(val) {
    return val === +val;
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

以前的参考

验证JavaScript中的十进制数字-IsNumeric()

ken*_*bec 8

如果您不想包含字符串,而确实希望包含 Infinity,则可以将参数的 Number 强制与参数进行比较:

function isNumber(n){
    return Number(n)=== n;
}
Run Code Online (Sandbox Code Playgroud)

//测试

[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
Run Code Online (Sandbox Code Playgroud)


Ari*_*rad 6

如果你想"23"成为一个数字,那么

function isNumber(val) {
    return !isNaN(val);
}
Run Code Online (Sandbox Code Playgroud)


mar*_*are 5

function isNumber(val){
    return typeof val==='number';
}
Run Code Online (Sandbox Code Playgroud)

  • 当然还有 `&& !isNaN(val)` 因为 `typeof NaN` 是数字。 (4认同)
  • @FarzadYousefzadeh 直到“不是数字”的类型为“数字”。一定喜欢 JavaScript。 (4认同)

pet*_*rov 5

var isNumber = function isNumber(value) 
{
   return typeof value === 'number' && isFinite(value);
}
Run Code Online (Sandbox Code Playgroud)

上面的代码摘自《 JavaScript-优秀部分》一书。

/ *回答更新开始-回答
提出问题的人下面的一些评论以及其他* /

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));
Run Code Online (Sandbox Code Playgroud)

/ *答案更新结束-回答
提出问题的人和其他人的以下评论* /

  • 只需使用“Number.isFinite”即可。对于非“number”值,它返回“false”。 (3认同)
  • 为什么要使用命名函数表达式? (2认同)