26.類數組轉換為數組
阿新 • • 發佈:2018-04-27
pan list clas 問題 name nodelist htm 代碼 執行c
類數組對象有三種:
1.arguments
2.元素集合
3.節點集合
var oLis = document.getElementByTagName("div");
console.dir(oLis); // ->HTMLCollection元素集合類的一個實例 ->它也是一個類數組集合
var oLis = document.getElementByName("div");
console.dir(oLis); // ->NodeList 節點集合類的一個實例 ->它也是一個類數組集合
類數組轉換成數組:
-》標準瀏覽器方法:
var ary = [].slice.call(oLis)
問題:在IE6-8瀏覽器中忙不支持借用數組的slice實現將元素集合的類數組轉換為數組,報錯(元素集合跟節點集合都不支持,但是arguments是支持的不存在任何兼容性問題)
-》非標準方法;IE6-8
for (var i = 0;i<oLis.length;i++) {
ary[ary.length] = oLis[i]
}
補充知識點:
1.瀏覽器的異常信息捕獲:
我們在JS中使用try,catch進行瀏覽器的異常信息捕獲
console.log(num) // 直接報錯,在js中本行報錯,下面的代碼都不在執行了
console.log("ok")
1)如果用try,catch捕獲了異常信息,不影響下面的代碼繼續執行。如果try裏面的代碼執行出錯了,會默認的去執行catch中的代碼
try { console.log(num) } catch(e) {// 形參必須要寫,一般起名為e console.log("報錯了") console.log(e.message,111111) // 可以收集當前代碼報錯的原因 } console.log("ok")
2)
需求:有時候既想捕獲到錯誤信息,又不想讓下面的代碼繼續執行
try { // js代碼 } catch(e) { // 如果代碼報錯執行catch中的代碼
// 手動拋出一條錯誤信息,終止代碼執行
throw new Error("當前網絡繁忙,請稍後再試")
new ReferenceError // ->引用錯誤信息
new TypeError // ->類型錯誤
new RangeError // ->範圍錯誤
} finally { // 一般不用:不管try中的代碼是否報錯,都要執行finally中的代碼 }
完整的類數組,轉化為數組的方法
var utils = { // 實現將類數組轉化為數組,利用try,catch檢測兼容 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; } }
26.類數組轉換為數組