for..of是es6中引入的新特性,它主要的作用是:迴圈乙個可迭代的物件。
它可以迴圈遍歷,陣列、字串、set物件等等,先來看兩個簡單的例子:
遍歷字串
let str = 'hello'for(item of str)
遍歷陣列
let arr = [1,2,3,4,5]for(arritem of arr)
遍歷物件
let obj =for(objitem of obj)
其實遍歷物件的時候,會報乙個錯誤:「uncaught typeerror: obj is not iterable」 ,大概意思就是obj物件是乙個不可迭代的物件,或者說它沒有迭代器。
怎麼辦呢?那就給obj新增乙個迭代器。
迭代器
接著上面的例子,我們給obj新增乙個迭代器
obj[symbol.iterator] = ()=>
緊接著,我們要在方法裡面去寫一下迭代規則,就是說,你想怎麼去迭代這物件。這個方法需要返回乙個next方法,next方法裡面,又需要返回乙個物件,
並且這個物件裡面需要有"done"屬性,「done」的值為bool型別的值,它相當於乙個條件(或者說是開關),
let obj =obj[symbol.iterator] = ()=>}}
}for(objitem of obj)
上面這個例子,第一次迴圈的時候,返回,列印「2」,第二次、第三次.... done的值一直是false,會出現死迴圈,一直列印「2」,
我們知道,如果要跳出迴圈,done的值要等於true,所以,我們可以加一些條件,當把物件遍歷完畢之後,跳出迴圈:
let obj =obj[symbol.iterator] = ()=>
} else }}
}}for
(objitem of obj)
總結:常見的迴圈方法有,for迴圈、map()、foreach()、filter()等等,可以發現,每個方法都有自己的規則,比如返回值什麼的。
那麼,我們可以通過迭代器,去自定義迴圈規則,通過迭代器,返回自己想要的結果。
迭代器和 for of 迴圈
1.for迴圈 支援break continue return等 for var index 0 index myarray.length index 2 foreach 不支援break continue return false相當於continue myarray.foreach functi...
Js中for in 和for of的區別
for in的使用array.prototype.sayhello function array.prototype.str 我是陣列原型的字串 定義乙個陣列 var arr 1 2,3 4 console.log arr 當前列印的沒有原型上的屬性和方法 1,2,3,4 使用for in迴圈 fo...
js中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不能迴圈普通的物件,需要通過和obj...