1. 程式人生 > >26.類數組轉換為數組

26.類數組轉換為數組

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.類數組轉換為數組