forEach()相容所有瀏覽器
ES5新增forEach方法,具體參閱JavaScript Array forEach()一章節。
但內建方法具有一定的瀏覽器相容性,下面就介紹一下如何實現相容性。
程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼執行程式碼if (typeof Array.prototype.forEach != "function") { Array.prototype.forEach = function (fn, context) { for (var k = 0, length = this.length; k < length; k++) { if (typeof fn === "function" && Object.prototype.hasOwnProperty.call(this, k)) { fn.call(context, this[k], k, this); } } }; } var func = function (value, index) { console.log(index + ":" + value); } var arr = ["螞蟻部落", "softwhy.com", "antzone", "青島市南區"]; arr.forEach(func);
上面的程式碼實現相容所有主流瀏覽器的功能,下面介紹一下它的實現過程。
一.程式碼註釋:
(1).if (typeof Array.prototype.forEach != "function") {},判斷當前瀏覽器是否支援forEach()方法。
(2).Array.prototype.forEach = function (fn, context) {},如果不支援,那麼就通過原型,為陣列新增一個forEach方法,第一個引數函式,第二個是fn函式的執行上下文物件。
(3).for (var k = 0, length = this.length; k < length; k++) {},遍歷陣列中的每一個元素。
(4).if (typeof fn === "function" && Object.prototype.hasOwnProperty.call(this, k)) ,判斷fn是否是一個函式,並且k是否是陣列的索引。下面再做進一步的說明:之所以使用Object.prototype.hasOwnProperty而不是Array.prototype.hasOwnProperty是因為後者被重寫的概率要遠高於前者,如果重寫了前者,那感覺此人腦子是鏽透了。之所以判斷k是否是陣列的索引是因為有些特殊情況,看如下程式碼例項:
[JavaScript] 純文字檢視 複製程式碼執行程式碼var arr = [1,,,,,,,2]; console.log(arr.length);
控制檯截圖如下:
儘管length值是8,但是其間的3-7的索引並沒有。
(5).fn.call(context, this[k], k, this),呼叫相應的函式並傳參。
二.相關閱讀:
(1).prototype參閱JavaScript prototype原型一章節。
(2).hasOwnProperty()參閱JavaScript hasOwnProperty()一章節。
(3).call()參閱JavaScript call()一章節。
相關文章
- 相容所有瀏覽器array物件indexOf()方法瀏覽器物件Index
- IE瀏覽器相容瀏覽器
- 9:瀏覽器相容瀏覽器
- 關於瀏覽器相容瀏覽器
- 瀏覽器相容性瀏覽器
- edge瀏覽器相容性設定在哪 新版edge瀏覽器相容模式怎麼弄瀏覽器模式
- 瀏覽器相容以及PostCSS詳解瀏覽器CSS
- 谷歌瀏覽器相容模式怎麼設定 chrome瀏覽器相容模式切換方法介紹谷歌瀏覽器模式Chrome
- 火狐瀏覽器相容模式怎麼設定在哪裡 火狐瀏覽器相容模式設定方法瀏覽器模式
- ie瀏覽器相容模式怎麼設定在哪裡 ie瀏覽器相容模式設定方法瀏覽器模式
- win10瀏覽器怎麼設定相容模式_win10瀏覽器相容模式如何新增Win10瀏覽器模式
- 新版edge瀏覽器相容模式怎麼設定 edge瀏覽器相容性設定在哪裡瀏覽器模式
- (16)CSS 擴充:① 瀏覽器相容 | CSSCSS瀏覽器
- element ui 相容低版本瀏覽器UI瀏覽器
- 導航的瀏覽器相容問題瀏覽器
- 360極速瀏覽器相容模式怎麼設定 360極速瀏覽器相容模式設定方法瀏覽器模式
- edge瀏覽器找不到相容性檢視設定 新版edge瀏覽器相容模式怎麼設定瀏覽器模式
- 360瀏覽器相容模式怎麼設定 360極速瀏覽器極速相容模式怎麼切換瀏覽器模式
- [BUG反饋]IE瀏覽器,百度瀏覽器,搜狗瀏覽器批量操作功能都不相容!!!!傲遊、火狐、谷歌瀏覽器可以瀏覽器谷歌
- html5多終端瀏覽器相容HTML瀏覽器
- 滑鼠右鍵相容MAC版火狐瀏覽器Mac瀏覽器
- 瀏覽器相容問題處理總結瀏覽器
- 手機瀏覽器通過Scheme跳轉APP,相容各種手機瀏覽器瀏覽器SchemeAPP
- win10瀏覽器相容性怎麼設定_win10瀏覽器相容性設定方法Win10瀏覽器
- 瀏覽器極速模式和相容模式差異瀏覽器模式
- 關於UC瀏覽器相容scroll事件問題瀏覽器事件
- 最強悍LoadRunner和瀏覽器相容完美攻略瀏覽器
- 幾款瀏覽器相容性測試工具瀏覽器
- CSS程式碼在不同瀏覽器相容問題CSS瀏覽器
- win10谷歌瀏覽器怎麼切換相容模式_win10系統谷歌瀏覽器怎麼設定相容模式Win10谷歌瀏覽器模式
- 前端檔案下載相容方案(相容主流瀏覽器,包括IE與Safari)前端瀏覽器
- 金三銀四,那瀏覽器相容你知多少?瀏覽器
- angular瀏覽器相容性問題解決方案Angular瀏覽器
- Ionic4相容IE瀏覽器處理瀏覽器
- 各大瀏覽器滾動條相容性問題瀏覽器
- 【瀏覽器】瀏覽器基本工作原理瀏覽器
- 如何機智地回答瀏覽器相容性問題瀏覽器
- 柯大俠整理的常見瀏覽器相容問題瀏覽器