1. 程式人生 > >javascript總for of和for in的區別?

javascript總for of和for in的區別?

  1. 推薦在迴圈物件屬性的時候,使用for...in,在遍歷陣列的時候的時候使用for...of

  2. for...in迴圈出的是key,for...of迴圈出的是value

  3. 注意,for...of是ES6新引入的特性。修復了ES5引入的for...in的不足

  4. 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]); }