<font color="#8A2BE2">[JS筆記]</font> for in 與 for of 的差異 === > 結論 > for of可使用的對象有Array、Map、Set、String、TypedArray、arguments > for in會遍歷自定義屬性,甚至原型鏈上的屬性也會遍歷到,反而又不是我們所想要的 > forEach 是沒有停止運行break的,相反的for就可以使用 for loop 搭配 break。 範例一 基礎for迴圈 --- ![](https://i.imgur.com/DrCPKXP.png) ```javascript= let arr = ['小明', '小華', {name: '小陳', gender: '女'}] for(let i=0; i<=arr.length-1; i++) { console.log(arr[i]) } ``` 範例二 for in 印出陣列index --- ![](https://i.imgur.com/g8PjxzO.png) ```javascript= let arr = ['小明', '小華', {name: '小陳', gender: '女'}] for(let index in arr) { console.log(index) } ``` 範例三 for of 印出陣列value --- ![](https://i.imgur.com/kkDym8B.png) ```javascript= let arr = ['小明', '小華', {name: '小陳', gender: '女'}] for (let value of arr) { console.log(value) } ``` 範例四 修正後for in也可以印出value --- ![](https://i.imgur.com/9i1fEZ7.png) ```javascript= let arr = ['小明', '小華', {name: '小陳', gender: '女'}] for(let index in arr) { console.log(arr[index]) } ``` 範例五 陣列中新增for in會不小心印到自己定義的key --- ![](https://i.imgur.com/9nizDPp.png) ```javascript= let arr = ['小明', '小華', {name: '小陳', gender: '女'}] arr.color = '藍色' console.log(arr) //[ '小明', '小華', { name: '小陳', gender: '女' }, color: '藍色' ] console.log(arr[3]) //undefined for(let index in arr) { console.log(index) } /* 0 1 2 color */ ``` --- for迴圈與for Each比較 === 範例一 for --- ![](https://i.imgur.com/AVWBVWy.png) ```javascript= const items = ['item1', 'item2', 'item3']; const copy = []; for (let i=0; i<items.length; i++) { copy.push(items[i]) } console.log(copy) ``` 範例二 for Each --- ![](https://i.imgur.com/ZlVs3WZ.png) ```javascript= const items = ['item1', 'item2', 'item3']; const copy = []; items.forEach(function(item) { copy.push(item) }); console.log(copy) ``` 範例三 參考MDN標準版本forEach (兩個參數) --- ![](https://i.imgur.com/LBLKztp.png) ```javascript= const man = [ {name: '川普', age: 70, id: 'USA01' }, {name: '拜登', age: 80, id: 'USA02' }, {name: '蔡英文', age: 63, id: 'TW01' }, ] man.forEach(function(value, index){ console.log(index + ':' + value.name) }) ``` 範例四 參考MDN標準版本forEach(一個參數value) --- ![](https://i.imgur.com/nHMpKyw.png) ```javascript= const man = [ {name: '川普', age: 70, id: 'USA01' }, {name: '拜登', age: 80, id: 'USA02' }, {name: '蔡英文', age: 63, id: 'TW01' }, ] man.forEach(function(value){ console.log(value.name) }) ``` 範例五 forEach搭配function函示 --- ![](https://i.imgur.com/tKl3szB.png) ```javascript= data = [10, 20, 30]; total = 0; data.forEach(function (item) { total += item; }); console.log(total);//60 ``` 範例六 forEach 搭配箭頭函示 (function拿掉,加上箭頭) --- ![](https://i.imgur.com/rILXTmb.png) ```javascript= data = [10, 20, 30]; total = 0; data.forEach( (item) => { total += item; }); console.log(total);//60 ``` 範例七 forEach 箭頭函示寫成一行 (範例六縮減版) --- ![](https://i.imgur.com/ZYnIql7.png) ```javascript= data = [10, 20, 30]; total = 0; //如果寫成一行長這樣 data.forEach( (item) => {total += item;}); console.log(total);//60 ``` --- AC電影清單中範例 for of 怎麼把電影一步一步加入空陣列變數中 === ![](https://i.imgur.com/LO6lyuk.png) ```javascript= const movies = [] const array1 = ['a', 'b', 'c']; for (const movie of array1) { console.log(movie) movies.push(movie) } console.log(movies) ``` 參考連結 === 參考: [連結:Ryan部落格](https://blog.typeart.cc/JavaScript中for%20of和for%20in的差別/) [連結:kanboo部落格](https://kanboo.github.io/2018/01/30/JS-for-of-forin/) [連結:安地斯波羅影片](https://www.youtube.com/watch?v=7OCEiYC6H8Y) [連結:unayo部落格 (AC)](https://hackmd.io/@unayojanni/HyzWz9R0u/%2F%40unayojanni%2FBJRcdDCWK) ###### tags: `[JS]`