兼容问题:在IE6~8中,不支持借用数组的slice实现将元素集合类数组对象转换为数组的方法,同样,节点集合也是不支持的,但是arguments则没有关于浏览器的兼容问题。
在标准浏览器中(谷歌,火狐,IE9及以上):
Array.prototype.slice.call(类数组)
非标准浏览器下(IE6,7,8):
使用循环的方式,
for(var i=0; i<类数组.length;i++){
ary[ary.length] = 类数组[i]
}
2:浏览器的异常信息捕获:
在JS中使用try,catch进行浏览器的异常信息捕获
try{
console.log(num) //正常进行的话会报错,num is not defind,但是放在try,catch中会,如果try中的代码出错了,则执行catch中的代码
}catch (e.message){ //形参必须要写,一般叫做为e
console,log(e.message) // ?当前代码报错的原因
console.log('ok')
};
正常中项目中都会使用下面的格式
try{
//<js code>
}catch(e){
//如果代码报错执行catch中的代码
}finally{
//一般不用,不管try中的代码会不会报错,都会执行这里面的代码
}
//但有时候既想捕获到错误的信息,又想不让下面的代码执行
try{
console.log(num)
}catch (e.message){ //形参必须要写,一般叫做为e
//手动抛出一条错误信息,终止代码执行
throw new Error('错误信息')
};
//常见错误类型
new ReferenceError:引用错误
new TypeError:类型错误
new RangeError:范围错误
//书写一个完整的类数组转为数组的方法
var utils = {
listToArray : function(likeAry){
var ary = [];
try{
ary=Array.prototype.slice.call(likeAry)
}cacth(){
for(var i=0; i<likeAry.length;i++){
ary[ary.length] = likeAry[i]
}
}
}
}