js学习总结----类数组转化为数组及浏览器异常信息捕获

一、类数组转换

类数组都有哪些,除了arguments还有下面两个HTMLCollection和NodeList

     var oLis = document.getElementsByTagName('div');
        console.dir(oLis)//HTMLCollection元素集合类的一个实例 它也是一个类数组集合
        oLis = document.getElementsByName('张三')
        console.dir(oLis);//NodeList节点集合 它也是一个类数组集合

然而在IE6-8浏览器中,不支持借助数组的slice方法实现将元素集合/节点集合的类数组转换为数组。会报错

但是对于arguments借用数组的方法是不存在任何兼容性问题的

标准浏览器可以通过如下方式转换成数组

var ary = Array.prototype.slice.call(oLis);

非标准浏览器

for(var i = 0;i<oLis.length;i++){
            ary[ary.length] = oLis[i]
        }

二、异常捕获

  我们在JS中使用try、catch进行浏览器的异常信息捕获

console.log(num)//报错  下面的代码不在执行了
console.log("ok")

  使用捕获的代码  

  当代码执行报错,如果用try/catch捕获了异常信息,不影响下面的代码继续执行;如果try中的代码执行出错了,会默认的去执行catch中的代码

     try{
            console.log(num)
        }catch(e){//形参必须要写,我们一般起名为e
       console.log(e.message) //可以收取当前代码报错的原因
        }
        console.log("ok")

  完整的try/catch代码  

     try{
            //js code
        }catch(e){
            //如果代码报错 执行catch中的代码
       
       throw new Error('当前网络繁忙,请稍后在试')//手动抛出一条错误信息,终止代码执行
       new ReferenceError ->引用错误
       new TypeError ->类型错误
       new RangeError ->范围错误
     }finally{
       
//一般不用:不管try中的代码是否报错,都要执行finally中的代码 }
     console.log("ok")

  利用try/catch解决类数组转换成数组兼容问题

     var utils = {
            listToArray:function(likeAry){
                var ary = [];
                try{
                    ary = Array.prototype.slice.call(likeAry);
                }catch(e){
                    for(var i = 0;i<likeAry.length;i++){
                        ary[ary.length] = likeAry[i]
                    }
                }
                return ary                
            }
        }
posted @ 2017-06-29 14:58  diasa  阅读(214)  评论(0编辑  收藏  举报