首頁 web前端 js教程 JavaScript在多瀏覽器下for迴圈的使用方法_javascript技巧

JavaScript在多瀏覽器下for迴圈的使用方法_javascript技巧

May 16, 2016 pm 05:48 PM
for迴圈 瀏覽器

一、前言
JavaScript語言在不同的瀏覽器的下有存在細微的差異,但不像DOM操作差異那麼大,現在為大家列舉出其中一個"for循環"的差異,並介紹如何有效的解決這種差異。

二、問題描述
在下面的測試程式碼例1 中IE6和Chrome輸出的結果是不一致,IE6不執行for語句裡的程式碼
複製程式碼 程式碼如下:

//例1:
alert("準備測試toString是否已被forfor列舉出來")
var forTest = { toString: 1 }
for (i in forTest) {
alert("toString被循環出來")//在IE6下這是不執行的,但是在Chrome執行並輸出結果值「1」
}

三、分析問題
JavaScript中的物件包含了'toString', 'valueOf', 'isPrototypeOf', 'propertyIsEnumerable','toLocaleString', 'hasOwnProperty', 'constructor'這7個內建方法。這7個內建方法用for語句是無法列舉出來的。但是IE6和Chrome對內建方法覆蓋的支援不一致。
IE6:雖然 可以內建覆寫 方法,但是 FOR迴圈無法枚舉 出來。
Chrome:可以內建覆寫 方法,FOR循環也能列舉出覆蓋的內建方法。
所以上面的測試代碼例1 中IE6和Chrome瀏覽器輸出結果不一致

四、解決問題
我們要解決上面描述的問題,我們要做二件事情:
使用者使用的瀏覽器是否支援FOR循環枚舉出覆蓋的內建方法
如何優雅的解決不相容問題,使所有的瀏覽器都可以FOR循環枚舉出覆蓋的內建方法
(解法例2)
複製程式碼 程式碼如下:


程式碼如下:


//例2 :
enumerables = true,
forTest = { toString: 1 }
for (i in forTest) {
enumerables = null;
}
if (enumerables) {//這些都是Object物件的屬性,有的瀏覽器(ie6)的for迴圈不會把這些屬性給遍歷出來,所以要手功的把屬性遍歷出來
enumerables = ['hasOwnProperty', 'valueOf', ' isPrototypeOf', 'propertyIsEnumerable',
'toLocaleString', 'toString', 'constructor'];
}

//如果enumerables為null則瀏覽器支援枚舉覆蓋的內建方法,否則只能如下面的程式碼強制的把內建方法複製到新的物件中。
/**
* 所有屬性複製到指定的物件
* @param {Object} object 待合併的物件
* @param {Object} config 來源屬性
* @return {Object} 傳回合併後的對象
*/
function apply(object, config) {
if (object && config && typeof config === 'object') {
var i, j, k ;
//這裡正常的複製物件的方法
for (i in config) {
object[i] = config[i];
}
//相容多瀏覽器把內建的屬性都能重製新的物件
if (enumerables) {
for (j = enumerables.length; j--;) {
k = enumerables[j];
if (config.hasOwnProperty(k)) {//判斷物件是否有某個特定的屬性。必須用字串指定該屬性。 (例如,config.hasOwnProperty("toString"))
object[k] = config[k];
}
}
}
}
return object;
}

複製程式碼


程式碼如下:


//例3:
var a={};
for (i in forTest) {
a[i] = forTest[ i];
} alert(a.toString) //ie6下複製失敗只能輸入"native code",並不是輸出我們所覆的值var b=apply({},forTest)
alert(b.toString)//使用apply函數,在IE6和Chrome輸出的值都是我們預期想得到的覆蓋值」1“



五、總結 筆者猜測在IE6裡的for語句把那7個內建函數標識到忽略列表,所以怎麼覆蓋也不能在for中枚舉出來,而Chrome就能夠智能的把覆蓋後的內置函數複製出來。
使用解決程式碼 例2 中的apply函數即可解決多瀏覽器下for循環不一致的問題 。
筆者是個菜鳥,也很少寫博客,如果我表達觀點的有錯,或者有筆誤,還請肯請大鳥們糾正錯誤。 六、常見問題 問:為什麼不先判斷瀏覽器的版本是否為IE6,在來設定對應的列舉方案呢? 答:我個人的觀點是,我不確定市場那麼多的瀏覽器(PC機就有N種瀏覽器,還有手機瀏覽器,以後也不知道還有什麼新版本的瀏覽器)分別是用什麼機制的for語制。所以就先測試那的for語句的機制。
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

apache服務器是什麼 apache服務器是乾嘛的 apache服務器是什麼 apache服務器是乾嘛的 Apr 13, 2025 am 11:57 AM

Apache服務器是強大的Web服務器軟件,充當瀏覽器與網站服務器間的橋樑。 1. 它處理HTTP請求,根據請求返回網頁內容;2. 模塊化設計允許擴展功能,例如支持SSL加密和動態網頁;3. 配置文件(如虛擬主機配置)需謹慎設置,避免安全漏洞,並需優化性能參數,例如線程數和超時時間,才能構建高性能、安全的Web應用。

解決 Craft CMS 中的緩存問題:使用 wiejeben/craft-laravel-mix 插件 解決 Craft CMS 中的緩存問題:使用 wiejeben/craft-laravel-mix 插件 Apr 18, 2025 am 09:24 AM

在使用CraftCMS開發網站時,常常會遇到資源文件緩存的問題,特別是當你頻繁更新CSS和JavaScript文件時,舊版本的文件可能仍然被瀏覽器緩存,導致用戶無法及時看到最新的更改。這個問題不僅影響用戶體驗,還會增加開發和調試的難度。最近,我在項目中遇到了類似的困擾,經過一番探索,我找到了wiejeben/craft-laravel-mix這個插件,它完美地解決了我的緩存問題。

HDFS文件系統在CentOS上的使用技巧 HDFS文件系統在CentOS上的使用技巧 Apr 14, 2025 pm 07:30 PM

CentOS系統下HDFS文件系統的安裝、配置及優化指南本文將指導您如何在CentOS系統上安裝、配置和優化Hadoop分佈式文件系統(HDFS)。 HDFS安裝與配置Java環境安裝:首先,確保已安裝合適的Java環境。編輯/etc/profile文件,添加以下內容,並將/usr/lib/java-1.8.0/jdk1.8.0_144替換為您的實際Java安裝路徑:exportJAVA_HOME=/usr/lib/java-1.8.0/jdk1.8.0_144exportPATH=$J

Tomcat日誌中如何查看線程狀態 Tomcat日誌中如何查看線程狀態 Apr 13, 2025 am 08:36 AM

要查看Tomcat日誌中的線程狀態,您可以採用以下幾種方法:TomcatManagerWeb界面:在瀏覽器中輸入Tomcat的管理地址(通常為http://localhost:8080/manager),登錄後即可查看線程池的狀態。 JMX監控:使用JMX監控工具(如JConsole)連接到Tomcat的MBean服務器,查看Tomcat線程池的狀態。在JConsole中選擇

Nginx性能監控與故障排查工具使用 Nginx性能監控與故障排查工具使用 Apr 13, 2025 pm 10:00 PM

Nginx性能監控與故障排查主要通過以下步驟進行:1.使用nginx-V查看版本信息,並啟用stub_status模塊監控活躍連接數、請求數和緩存命中率;2.利用top命令監控系統資源佔用,iostat和vmstat分別監控磁盤I/O和內存使用情況;3.使用tcpdump抓包分析網絡流量,排查網絡連接問題;4.合理配置worker進程數,避免並發處理能力不足或進程上下文切換開銷過大;5.正確配置Nginx緩存,避免緩存大小設置不當;6.通過分析Nginx日誌,例如使用awk和grep命令或ELK

Nginx日誌分析與統計,了解網站訪問情況 Nginx日誌分析與統計,了解網站訪問情況 Apr 13, 2025 pm 10:06 PM

本文介紹瞭如何分析Nginx日誌以提升網站性能和用戶體驗。 1.理解Nginx日誌格式,例如時間戳、IP地址、狀態碼等;2.使用awk等工具解析日誌,統計訪問量、錯誤率等指標;3.根據需求編寫更複雜的腳本或使用更高級工具,例如goaccess,分析不同維度的數據;4.對於海量日誌,考慮使用Hadoop或Spark等分佈式框架。通過分析日誌,可以識別網站訪問模式、改進內容策略,並最終優化網站性能和用戶體驗。

如何在CentOS上監控HDFS狀態 如何在CentOS上監控HDFS狀態 Apr 14, 2025 pm 07:33 PM

在CentOS系統上監控HDFS(Hadoop分佈式文件系統)狀態有多種途徑。本文將介紹幾種常用方法,助您選擇最合適的方案。 1.利用Hadoop自帶的WebUIHadoop自帶的Web界面提供集群狀態監控功能。步驟:確保Hadoop集群已啟動並運行。訪問WebUI:在瀏覽器中輸入http://:50070(Hadoop2.x)或http://:9870(Hadoop3.x)。默認用戶名和密碼通常為hdfs/hdfs。 2.命令行工具監控Hadoop提供一系列命令行工具,方便監

Debian OpenSSL如何配置HTTPS服務器 Debian OpenSSL如何配置HTTPS服務器 Apr 13, 2025 am 11:03 AM

在Debian系統上配置HTTPS服務器涉及幾個步驟,包括安裝必要的軟件、生成SSL證書、配置Web服務器(如Apache或Nginx)以使用SSL證書。以下是一個基本的指南,假設你使用的是ApacheWeb服務器。 1.安裝必要的軟件首先,確保你的系統是最新的,並安裝Apache和OpenSSL:sudoaptupdatesudoaptupgradesudoaptinsta

See all articles