為了方便例子講解,現有數組和json物件如下
var demoArr = ['Javascript', 'Gulp', 'CSS3', 'Grunt', 'jQuery', 'angular']; var demoObj = { aaa: 'Javascript', bbb: 'Gulp', ccc: 'CSS3', ddd: 'Grunt', eee: 'jQuery', fff: 'angular' };
for
可以直接看範例,用得太多了,很簡單
(function() { for(var i=0, len=demoArr.length; i<len; i++) { if (i == 2) { // return; // 函数执行被终止 // break; // 循环被终止 continue; // 循环被跳过 }; console.log('demo1Arr['+ i +']:' + demo1Arr[i]); } })(); 关于for循环,有一下几
關於for循環,有以下幾點要注意
- for迴圈中的i在迴圈結束之後任然存在與作用域中,為了避免影響作用域中的其他變量,使用函數自執行的方式將其隔離起來()();
- 避免使用for(var i=0; i
var i = 0, len = demo1Arr.length; for(; i<len; i++) {};
- 跳出循環的方式有下列幾種
return 函數執行被終止
break 迴圈被終止
continue 迴圈被跳過
完整實例
for in
for(var item in arr|obj){} 可以用來遍歷陣列與物件
- 遍歷陣列時,item表示索引值, arr表示目前索引值對應的元素 arr[item]
- 遍歷物件時,item表示key值,arr表示key值對應的value值 obj[item]
(function() { for(var i in demoArr) { if (i == 2) { return; // 函数执行被终止 // break; // 循环被终止 // continue; // 循环被跳过 }; console.log('demoArr['+ i +']:' + demoArr[i]); } console.log('-------------'); })();
關於for in,有以下幾點要注意:
- 在for迴圈與for in迴圈中,i值都會在迴圈結束後保留。因此使用函數自執行的方式來避免。
- 使用return,break,continue跳出迴圈都與for迴圈一致,不過關於return需要注意,在函數體中,return表示函數執行終止,就算是迴圈外面的程式碼,也不再繼續往下執行。而break僅僅只是終止循環,後面的程式碼會繼續執行。
function res() { var demoArr = ['Javascript', 'Gulp', 'CSS3', 'Grunt', 'jQuery', 'angular']; for(var item in demoArr) { if (item == 2) { return; }; console.log(item, demoArr[item]); } console.log('desc', 'function res'); //不会执行 }
forEach
demoArr.forEach(function(arg) {})
參數arg表示陣列每一項的元素,實例如下
demoArr.forEach(function(e) { if (e == 'CSS3') { return; // 循环被跳过 // break; // 报错 // continue;// 报错 }; console.log(e); })
具體有以下要注意的地方
forEach無法遍歷物件
forEach無法在IE中使用,firefox和chrome實作了該方法
forEach無法使用break,continue跳出循環,使用return時,效果和在for迴圈中使用continue一致
do/while
函數具體的實現方式如下,不過有一點值得注意的是,當使用continue時,如果你將i 放在了後面,那麼i 的值將一直不會改變,最後陷入死循環。因此使用do/while一定要小心謹慎一點。
不建議使用do/while的方式來遍歷陣列
// 直接使用while
(function() { var i = 0, len = demoArr.length; while(i < len) { if (i == 2) { // return; // 函数执行被终止 // break; // 循环被终止 // continue; // 循环将被跳过,因为后边的代码无法执行,i的值没有改变,因此循环会一直卡在这里,慎用!! }; console.log('demoArr['+ i +']:' + demoArr[i]); i ++; } console.log('------------------------'); })(); // do while (function() { var i = 0, len = demo3Arr.length; do { if (i == 2) { break; // 循环被终止 }; console.log('demo2Arr['+ i +']:' + demo3Arr[i]); i++; } while(i<len); })();
$.each
$.each(demoArr|demoObj, function(e, ele))
可以用來遍歷數組和對象,其中e表示索引值或key值,ele表示value值
$.each(demoArr, function(e, ele) { console.log(e, ele); })
輸出為
0 "Javascript"
1 "Gulp"
2 "CSS3"
3 "Grunt"
4 "jQuery"
5 "angular"
這裡有很多要注意的地方
- 使用return 或return true為跳過一次循環,繼續執行後面的循環
- 使用return false為終止迴圈的執行,但是不終止函式執行
- 無法使用break與continue來跳過迴圈
- 循環中this值輸出類似如下
console.log(this); //String {0: "C", 1: "S", 2: "S", 3: "3", length: 4, [[PrimitiveValue]]: "CSS3"} console.log(this == ele); // true
關於上面的this值,遍歷一下
$.each(this, function(e, ele) { console.log(e, ele); }) // 0 c // 1 s // 2 s // 4 3
為什麼length 和 [[PrimitiveValue]]沒有遍歷出來?突然靈光一動,在《javascript高階程式》中找到了答案,大概意思是javascript的內部屬性中,將物件資料屬性中的Enumerable設定為了false
// 查看length的内部属性 console.log(Object.getOwnPropertyDescriptor(this, 'length')); // Object {value: 4, writable: false, enumerable: false, configurable: false}
$.each 中的 $(this) 與this有所不同,不過遍歷結果卻是一樣,你可以在測試程式碼中列印出來看看
$(selecter).each
專門用來遍歷DOMList
$('.list li').each(function(i, ele) { console.log(i, ele); // console.log(this == ele); // true $(this).html(i); if ($(this).attr('data-item') == 'do') { $(this).html('data-item: do'); }; })
- i: 序列值 ele: 只目前被遍歷的DOM元素
- this 目前被遍歷的DOM元素,不能呼叫jQuery方法
- $(this) == $(ele) 目前被遍歷元素的jquery對象,可以呼叫jquery的方法進行dom操作
使用for in 遍歷DOMList
因為domList並非數組,而是一個對象,只是因為其key值為0,1,2... 而感覺與數組類似,但是直接遍歷的結果如下
var domList = document.getElementsByClassName('its'); for(var item in domList) { console.log(item, ':' + domList[item]); } // 0: <li></li> // 1: <li></li> // ... // length: 5 // item: function item() {} // namedItem: function namedItem() {}
因此我們在使用for in 遍歷domList時,需要將domList轉換為陣列
var res = [].slice.call(domList); for(var item in res) {}
类似这样的对象还有函数的属性arguments对象,当然字符串也是可以遍历的,但是因为字符串其他属性的enumerable被设置成了false,因此遍历出来的结果跟数组是一样的,也就不用担心这个问题了.
小补充
如果你发现有些人写函数这样搞,不要惊慌,也不要觉得他高大上。
+function(ROOT, Struct, undefined) { ... }(window, function() { function Person() {} })
()(), !function() {}() +function() {}() 三种函数自执行的方式。
以上就是本文的全部内容,希望对大家的学习有所帮助。

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

JavaScript框架的強大之處在於簡化開發、提升用戶體驗和應用性能。選擇框架時應考慮:1.項目規模和復雜度,2.團隊經驗,3.生態系統和社區支持。

引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

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

SublimeText3 Linux新版
SublimeText3 Linux最新版

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。