關注「鬆寶寫代碼」,精選好文,每日一題vue
時間永遠是本身的面試
每分每秒也都是爲本身的未來鋪墊和增值算法
做者:saucxs | songEagle數組
2020.12.23 日剛立的 flag,每日一題,題目類型不限制,能夠是:算法題,面試題,闡述題等等。數據結構
本文是「每日一題」第 7 題:[每日一題]面試官問:for in和for of 的區別和原理?異步
往期「每日一題」:學習
第 6 題 [每日一題]面試官問:Async/Await 如何經過同步的方式實現異步?code
第 5 道「每日一題」到底該如何回答:vue數據綁定的實現原理?對象
這個題目自己不是特別難,只能說是做爲社招的基礎面試題,可是若是想回答好這道題也不是很容易。
不信接着往下看:
不少人會去問:for in 和for of的區別,
我說:for in是獲取屬性名,for of獲取屬性值。
首先咱們先看一個對象遍歷的例子
var obj = {name: 'saucxs',age: 21,sex: 1}; for(key in obj){ console.log(key, obj[key]); // name saucxs // age 21 // sex 1 } for(key of obj){ console.log(key, obj[key]); // typeError :obj is not iterable報錯 }
說明obj對象沒有iterable屬性報錯,使用不了for of。
咱們如今再看一個數組遍歷的例子
var array = ['a','b','c']; for(var key in array){ console.log(key, array[key]); // 0 a // 1 b // 2 c } for(var key of array){ console.log(key, array[key]); // a undefined // b undefined // c undefined }
這回沒有報錯,爲何呢?
咱們再看一個例子:
var array = ['a', 'b', 'c']; array.name = 'saucxs' for(key in array){ console.log(key, array[key]) // 0 a // 1 b // 2 c // name saucxs }
for in 循環返回的值都是數據結構的鍵名。
遍歷對象返回的是對象的key值,遍歷數組返回的是數組的下標。
還會遍歷原型上的值和手動添加的值
總的來講:for in適合遍歷對象。
for of 循環獲取一對鍵值中的鍵值。
一個數據結構只要部署了Symbol.iterator屬性,就被視爲具備iterator接口,能夠使用for of。
for of不一樣於forEach,for of是能夠break,continue,return配合使用,for of 循環能夠隨時退出循環。
總的來講:for of遍歷全部數據結構的統一接口。
哪些數據結構部署了Symbol.iterator屬性?
如下數據結構的有iterator接口的:
若是我很是想讓對象用for of?
能夠使用Object.keys()獲取對象的key值集合,在用for of。
var obj = {name: 'saucxs',age: 18, sex: 1}; for(var key of Object.keys(obj)){ console.log(key, obj[key]); // name saucxs // age 21 // sex 1 }
這樣也能夠給一個對象部署Symbol.iterator屬性。
「鬆寶寫代碼」:開發知識體系構建,技術分享,項目實戰,實驗室,每日一題,帶你一塊兒學習新技術,總結學習過程,讓你進階到高級資深工程師,學習項目管理,思考職業發展,生活感悟,充實中成長起來。問題或建議,請公衆號留言。
回覆「校招」獲取內推碼
回覆「社招」獲取內推
回覆「實習生」獲取內推
後續會有更多福利
回覆「算法」獲取算法學習資料
本文是「每日一題」第 7 題:面試官問:for in和for of 的區別和原理?