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


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

 1 array.sort=function(a){//only for num
 2 try{
 3 
 4   if(!a.some(function(x){return(typeof("string"))})){
 5   var max=a.length-1;
 6 
 7 for(var j=0;j<max;j++){
 8 
 9 for(var i=0;i<max;i++){
10 
11   if(a[i]>=a[i+1]){
12    var tem=a[i+1];
13     a[i+1]=a[i];
14     a[i]=tem;
15   }
16 
17 
18 }
19 }
20 return a;
21 }
22 return -2
23 
24 
25 }
26 
27 catch(ex){
28   return -2;
29 }
30 
31 }

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

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

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

我试过传入null,则trycatch成功返回-2,而undefined也同样正确返回-2,所以这是一个特例,还是要注意一下。

优质内容筛选与推荐>>
1、Build Simple HTTP server
2、MySql 索引
3、Mycat实战之日志分析
4、C# HttpWebRequest提交数据方式浅析
5、Linux 设置字符集


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号