for...of 与 for...in 区别

作者: 后除 | 来源:发表于2018-03-14 17:57 被阅读10次

    一、for...of

    1.定义

    for...of 语句遍历可迭代对象(包括数组、Set 和 Map 结构、arguments 对象、DOM NodeList 对象、字符串等)。

    2.语法

    for (variable of iterable) {
        //statements
    }
    

    3.示例

    <ul>
        <li>mazey</li>
        <li>luna</li>
        <li>cherrie</li>
    </ul>
    <script>
    // 数组
    let arr = ['mazey', 'luna', 'cherrie'];
    for (let v of arr) {
        console.log(v);
    }
    // mazey luna cherrie
    
    // 字符串
    let str = 'mlc';
    for (let v of str) {
        console.log(v);
    }
    // m l c
    
    // 类数组对象
    let obj = {
        0: 'mazey',
        1: 'luna',
        2: 'cherrie',
        length: 3
    };
    // 需使用Array.from转换成可迭代对象
    for (let v of Array.from(obj)) {
        console.log(v);
    }
    // mazey luna cherrie
    
    // Set
    let s = new Set(['mazey', 'luna', 'cherrie']);
    for (let v of s) {
        console.log(v);
    }
    // mazey luna cherrie
    
    // Map
    let m = new Map([
        ['name0', 'mazey'],
        ['name1', 'luna'],
        ['name2', 'cherrie']
    ]);
    for (let [i, v] of m) {
        console.log(v);
    }
    // mazey luna cherrie
    
    // DOM NodeList
    let domList = document.querySelectorAll('li');
    for (let v of domList) {
        console.log(v.innerText);
    }
    // mazey luna cherrie
    </script>
    

    二、for...of 与 for...in 区别

    1.for...in 遍历键名,for...of 遍历键值

    let arr = ['mazey', 'luna', 'cherrie'];
    for (let k in arr) {
        console.log(k);
    }
    // 0 1 2
    for (let v of arr) {
        console.log(v);
    }
    // mazey luna cherrie
    

    2.for...in 会把对象上手动添加的属性和原型上的属性暴露出来

    let obj = {
        0: 'mazey',
        1: 'luna',
        2: 'cherrie',
        length: 3
    };
    obj.name = 'objName';
    for (let k in obj) {
        console.log(k);
    }
    // 0 1 2 length name
    for (let v of Array.from(obj)) {
        console.log(v);
    }
    // mazey luna cherrie
    

    三、for...of 其它优点

    1.相对于数组自带的 forEach 方法,for...of 可以与 break、continue 和 return 配合使用。
    2.正确识别32位 UTF-16 字符。

    相关文章

      网友评论

        本文标题:for...of 与 for...in 区别

        本文链接:https://www.haomeiwen.com/subject/tnfqqftx.html