您的位置:首页 > Web前端 > JavaScript

近期写js库中遇到的一个判别的问题

2015-04-18 22:46 120 查看
最近在写一个自己的js库,正写到数组包,在里面定义了一个排序,只对纯数字数据进行排序的方法,但是在测试的时候发现一个很诡异的问题,那就是传入一个对象的时候,它没有返回erroemsg而是返回了对象,上代码:

array.sort=function(a){//only for num
try{

if(!a.some(function(x){return(typeof("string"))})){
var max=a.length-1;

for(var j=0;j<max;j++){

for(var i=0;i<max;i++){

if(a[i]>=a[i+1]){
var tem=a[i+1];
a[i+1]=a[i];
a[i]=tem;
}

}
}
return a;
}
return -2

}

catch(ex){
return -2;
}

}


这是用的冒泡排序来进行数据排序的,可是传入对象后,没有返回-2.

在大神的帮助下,知道了,原来在传入对象的时候,object.length会返回undefined,然后undefined在下面的max<j中会有一个隐式的类型转换变为NaN,然后for循环直接跳出return -2,不会throw error

所以在这里,最难想到的是object.length会返回undefined,然后下面的转换,

我试过传入null,则trycatch成功返回-2,而undefined也同样正确返回-2,所以这是一个特例,还是要注意一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: