JavaScript for...in 語句
for...in 語句用於將陣列或物件的屬性循環操作。
for ... in 迴圈中的程式碼每執行一次,就會對陣列的元素或物件的屬性進行一次操作。
Tip:for-in迴圈應該用在非陣列物件的遍歷上,使用for-in進行迴圈也稱為「枚舉」。 ·
語法:
for (变量 in 对象) { 在此执行代码}
「變數」用來指定變數,指定的變數可以是陣列元素,也可以是物件的屬性。
實例:使用 for ... in 迴圈遍歷陣列。
<script>var x var mycars = new Array() mycars[0] = "Saab" mycars[1] = "Volvo" mycars[2] = "BMW" for (x in mycars) { document.write(mycars[x] + "<br />") }</script>
注意一:for in迴圈不會依照屬性的下標來排列輸出。
//code from http://caibaojian.com/js-loop-for-in.html"first":"first", "zoo":"zoo", "2":"2", "34":"34", "1":"1", "second":"second"};for (var i in obj) { console.log(i); };输出:1234firstzoosecond
執行時按chrome執行,先把當中的非負整數鍵提出來,排序好輸出,然後將剩下的定義時的順序輸出。由於這個奇葩的設定,讓avalon的ms-with物件排序不如預期輸出了。只能強制使用者不要以純數字定義鍵名。
實例1:在陣列的原型物件上定義了一個新的屬性,使用for循環沒出現問題
function getNewArray(){var array=[1,2,3,4,5];Array.prototype.age=13; var result = [];for(var i=0;i<array.length result.push><p>實例2:採用了for in循環,但是給我們期望的一樣還是得到了12345的正確結果</p> <pre style="margin-top:15px; margin-bottom:15px; line-height:18px; font-family:monaco," andale mono new padding:10px border-width:1px border-style:solid border-color:rgb background-color:rgb word-break:break-all word-wrap:break-word color:rgb class="brush:js;toolbar:false;">function getArrayTwo(){var array=[1,2,3,4,5 ]; var result=[]; for(var i in array){ result.push(array[i]); }alert(result.join('')); }
實例3:為原型添加屬性之後,預設情況下枚舉,最後輸出1234513
function getNewArrayTwo(){var array=[1,2,3,4,5 ]; Array.prototype.age=13;var result=[]; for(var i in array){ result.push(array[i]); }alert(result.join('')); }
所以建議不要對陣列執行for in循環,事實上,在高性能javascript這本書中,也強調了for in循環的不好,因為它總是會訪問該對象的原型,看下原型上是否有屬性,這在無意中就給遍歷增加了額外的壓力。
解決方法:
如果某個物件具有給定名稱的屬性,那麼Object.prototype.hasOwnProperty(name)傳回true。如果該物件是從原型鏈中繼承了該屬性,或根本沒有這樣的一個屬性,則傳回false。透過hasOwnProperty限定for in循環在目前中遍歷,而不用去考慮它的原型屬性。
function finalArray(){var array=[1,2,3,4,5 ]; Array.prototype.age=13; var result=[];for(var i in array){if(array.hasOwnProperty(i)){ result.push(array[i]); } }alert(result.join('')); }
注意事項:
1.有一部分瀏覽器,例如早期的safari瀏覽器,不支援這個方法
2.物件經常被用作哈希值,這就是存在hasOwnProperty被另外的屬性屏蔽的風險(但是我估計沒有人那麼無聊使用這個屬性)
以上是js中的for in迴圈和for迴圈有什麼區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver CS6
視覺化網頁開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

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