for……of

允许遍历Arrays(数组) Strings(字符串) Maps(映射) Sets(集合)等可迭代的数据结构

for(variable of iterable){
    statement
}

variable :每个迭代的属性值被分配给该变量

iterable:一个具有可枚举属性并且可迭代的对象

        const arr = [1, 3, 7]
        for (const value of arr) {
            console.log(value) // 1,3,7
        }

Map对象就是保存 key-value 键值对。对象和原始值可以用作key键或value值。 Map对象根据其插入方式迭代元素。

for of循环将为每次迭代返回一个key-value数组

        const iterable = new Map([['one', 1], ['two', 2]]);

        for (const [key, value] of iterable) {
            console.log(`Key: ${key} and Value: ${value}`);
            // Key: one and Value: 1

        }

Set对象允许你存储任何类型的唯一值,这些值可以是原始值或对象。Set对象知识值的集合。

Set集合中的值只能发生一次。如果您创建一个具有多个相同元素的Set集合,那么它仍然被认为是单个元素。

const iterable = new Set([1, 1, 2, 2, 1]);
 
for (const value of iterable) {
  console.log(value); // 1 2
}
  • 生成器 Generator

生成器是一个函数 它可以退出函数,稍后重新进入函数

 function* generator(){
            yield 1;
            yield 2;
            yield 3;


        }
        for(const g of generator()){
            console.log(g) //1 2 3
        }
  • 普通对象不可迭代

用Array.from

        const obj = { length: 3, 0: 'foo', 1: 'bar', 2: 'baz' };

        const array = Array.from(obj); //["foo", "bar", "baz"]
        console.log(array)
        for (const value of array) {
            console.log(value);
        }
  • for in

for in 循环将遍历对象的所有可枚举属性

  Array.prototype.newArr = () => { };
        Array.prototype.anotherNewArr = () => { };
        const array = ['f是颠三倒四o', 'bar', 'baz'];

        for (const value in array) {
            console.log(value); // 0 1 2 newArr anotherNewArr
        }

for...in 不仅枚举上面的数组声明,它还从构造函数的原型中查找继承的非枚举属性,在这个例子中,newArranotherNewArr 也会打印出来。

for - of 更多用于特定的集合,但不包括所有对象

for-in 不考虑构造函数的不可枚举属性。它只需要查找可枚举属性并将其打印出来

你可能感兴趣的:(for……of)