本文實例分析了JavaScript類數組對象轉換為數組對象的方法。分享給大家供大家參考,具體如下:
1、類數組對象:
擁有length屬性,可以通過下標訪問;
不具有數組所具有的方法。
2、為什么要將類數組對象轉換為數組對象?
數組對象Array有很多方法:shift、unshift、splice、slice、concat、reverse、sort,ES6又新增了一些方法:forEach、isArray、indexOf、lastIndexOf、every、some、map、filter、reduce等。由于類數組不具有數組所具有的操作數組的方法,將類數組轉換為數組之后就能調用這些強大的方法,方便快捷。更多JavaScript數組的方法請見:http://www.survivalescaperooms.com/article/144359.htm
3、類數組對象轉換為數組對象的方法:
1) Array.prototype.slice.call(arrayLike) 或 Array.prototype.slice.call(arrayLike, 0) 或 [].slice.call (arrayLike) 或 [].slice.call (arrayLike, 0)
var div1 = Array.prototype.slice.call(document.querySelectorAll('div'), 0);var div2 = Array.prototype.slice.call(document.querySelectorAll('div'));var div3 = [].prototype.slice.call(document.querySelectorAll('div'), 0);var div4 = [].prototype.slice.call(document.querySelectorAll('div'));2) Array.from(arrayLike)
var divs = Array.from(document.querySelectorAll('div'));3) 原生JavaScript轉換
var length = arrayLike.length;var arr = [];for (var i = 0; i < length; i++) { arr.push(arrayLike[i]); return arr;}4、JavaScript如何判斷一個對象是否為數組?
使用typeof運算符不能判斷一個對象是否為數組,因為typeof arr返回的是object而不是array。
1) arr instanceof Array返回true
2) arr.constructor == Array返回true
說明:使用instanceof和constructor判斷數組類型的問題在于,它假定只有一個運行環境,如果網頁中包含多個框架,那么實際上存在兩個以上不同的全局執行環境,進而存在兩個不同版本的Array構造函數,如果從一個框架向另一個框架傳入一個數組,那么傳入的數組與第二個框架中原生創建的數組分別具有各自不同的構造函數,也就是說,object.constructor == Array 會返回false。
原因:Array屬于引用型數據,傳遞過程僅僅是引用地址的傳遞,每個頁面的Array原生對象所引用的地址是不一樣的,在子頁面聲明的Array所對應的構造函數,是子頁面的Array對象,父頁面進行判斷時使用的Array并不等于子頁面的Array。
3) Array.isArray(arr)方法返回true
ES5新增了Array.isArray()方法,這個方法的目的是:最終確定一個值是否是數組,不管它是在哪個全局環境創建的。
4) Object.prototype.toString.call(arr) === "[object Array]"返回true
這是最簡單的判斷一個對象是否為數組的方法。
更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript數組操作技巧總結》、《JavaScript事件相關操作與技巧大全》、《JavaScript數據結構與算法技巧總結》、《JavaScript操作DOM技巧總結》及《JavaScript字符與字符串操作技巧總結》
希望本文所述對大家JavaScript程序設計有所幫助。
新聞熱點
疑難解答