js中for of 的使用和迭代器

2022-07-20 01:57:10 字數 1255 閱讀 9869

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...