12 javascript int numbers
我的代码是:
function isNumber(n){
return typeof n == 'number' && !isNaN(n);
}
window.onload=function(){
var a=0,b=1,c=2.2,d=-3,e=-4.4,f=10/3;
var shouldBeTrue=[a,b,c,d,e,f];
var aa="0",bb="1",cc="2.2",dd="-3",ee="-4.4",ff="10/3";
var shouldBeFalse=[aa,bb,cc,dd,ee,ff];
var aaa,bbb=true,ccc=false,ddd=document.getElementsByTagName('html');
var alsoTheseBeFalse=[aaa,bbb,ccc,ddd,""," ",,null,NaN];
for(var i=0;i<shouldBeTrue.length;i++)
if(isNumber(shouldBeTrue[i]) != true) alert("x");
for(i=0;i<shouldBeFalse.length;i++)
if(isNumber(shouldBeFalse[i]) != false) alert("x");
for(i=0;i<alsoTheseBeFalse.length;i++)
if(isNumber(alsoTheseBeFalse[i]) != false) alert("x");
}
Run Code Online (Sandbox Code Playgroud)
我应该检查什么以确保我的功能在所有方面都是101%完美?(另外,如果你知道更好的功能请告诉我)
Rob*_*b W 18
如果要检查数字是否是实数,还应检查它是否有限:
function isNumber(n){
return typeof n == 'number' && !isNaN(n) && isFinite(n);
}
Run Code Online (Sandbox Code Playgroud)
另一种方法(下面的解释):
function isNumber(n){
return typeof n == 'number' && !isNaN(n - n);
}
Run Code Online (Sandbox Code Playgroud)
由于JavaScript数字代表实数,因此相同数字上的减法操作数应产生零值(附加标识).超出范围的数字应该(并且将)无效,NaN.
1 - 1 = 0 // OK
Infinity - Infinity = NaN // Expected
NaN - NaN = NaN // Expected
NaN - Infinity = NaN
Run Code Online (Sandbox Code Playgroud)