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); } |
如果您希望
1 2 3 | function isNumber(val) { return !isNaN(val); } |
号
如果我需要为API编写
1 2 3 | function isNumber(val) { return !isNaN(val); } |
号
…但是我不会费心编写一个