javascript總for of和for in的區別?
阿新 • • 發佈:2018-11-19
-
推薦在迴圈物件屬性的時候,使用
for...in
,在遍歷陣列的時候的時候使用for...of
。 -
for...in
迴圈出的是key,for...of
迴圈出的是value -
注意,
for...of
是ES6新引入的特性。修復了ES5引入的for...in
的不足 -
for...of
不能迴圈普通的物件,需要通過和Object.keys()
搭配使用
假設我們要遍歷一個數組的valuelet aArray = ['a',123,{a:'1',b:'2'}]
使用for...in
迴圈:
for(let index in aArray){
console.log(`${aArray[index]}`); }
使用for...of
迴圈:
for(var value of aArray){
console.log(value);
}
咋一看好像好像只是寫法不一樣而已,那為什麼說for...of
修復了for...in
的缺陷和不足。
假設我們往陣列新增一個屬性name:aArray.name = 'demo'
,再分別檢視上面寫的兩個迴圈:
for(let index in aArray){
console.log(`${aArray[index]}`); //Notice!!aArray.name也被迴圈出來了 } for(var value of aArray){ console.log(value); }
所以說,作用於陣列的for-in
迴圈除了遍歷陣列元素以外,還會遍歷自定義屬性。
for...of
迴圈不會迴圈物件的key,只會迴圈出陣列的value,因此for...of
不能迴圈遍歷普通物件,對普通物件的屬性遍歷推薦使用for...in
如果實在想用for...of
來遍歷普通物件的屬性的話,可以通過和Object.keys()
搭配使用,先獲取物件的所有key的陣列
然後遍歷:
var student={
name:'wujunchuan',
age:22, locate:{ country:'china', city:'xiamen', school:'XMUT' } } for(var key of Object.keys(student)){ //使用Object.keys()方法獲取物件key的陣列 console.log(key+": "+student[key]); }