JavaScript在多瀏覽器下for迴圈的使用方法_javascript技巧
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) {
} 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語句的機制。

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

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

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

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

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

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

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