【发布时间】:2012-01-21 11:48:13
【问题描述】:
我的代码是:
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");
}
我还应该检查什么以确保我的功能在所有方面都 101% 完美? (另外,如果你知道更好的功能请告诉我)
【问题讨论】:
-
您希望完善哪个功能?您可以从给变量起更有意义的名称开始...
-
@frenchie:他说的是
isNumber(n)函数。 -
有数字案例你没有检查,但我不能让你的函数中断(即:g=2E30,gg=0/0)
-
@Brian,好吧 0/0=NaN(我确实检查过),但我对 '2E30' 的事情很好奇,因为它返回 true。你知道为什么它返回 true 吗?
-
旁注,在您的测试用例中,您使用的是
!= false。这不是必需的,因为您的isNumber函数总是返回一个布尔值(true或false)。在if ( ... )中,表达式始终被视为布尔值。if (isNumber(a) != false)等价于if (isNumber(a) == true)等价于if (isNumber(a))。
标签: javascript numbers int