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 } }