首页 Iterator遍历器
文章
取消

Iterator遍历器

Iterator遍历器

ES6语法中,有序集合的数据类型已经有很多

  • Array、May、Set、String、TypedArray、arguments、NodeList
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 function each(data) {
    let iterator = data[Symbol.iterator]()

    // iterator.next() // 有数据返回 {value: 1, done: false}
    // iterator.next()
    // iterator.next()
    // iterator.next() // 没有数据时返回 {value: undefind, done: true}

    let item = {done: false}
    while (!item.doone) {
        item = iterator.next()
        if (!item.done) {
            console.log(item.value)
        }
    }
 }

Symbol.iterator并非都知道,因此使用for...of语句,它已经包含了Symbol.iterator

1
2
3
4
5
function each(data) {
    for (let item of data) {
        console.log(item)
    }
}

Map 与 Object 区别

在ES6(ECMAScript 2015)中,引入了Map数据结构,它与普通对象(Plain Object)之间有一些区别。以下是它们的主要区别:

  1. 键类型:
    • Map: 可以使用任意数据类型作为键,包括基本数据类型(如字符串、数字)以及对象、函数等。
    • 普通对象: 键只能是字符串或符号。
  2. 键值对顺序:
    • Map: 保留插入顺序,迭代时按照插入顺序进行。
    • 普通对象: 不保证属性的顺序,可能会在不同 JavaScript 引擎中有所不同。
  3. 大小属性:
    • Map: 有一个size属性,可以获取键值对的数量。
    • 普通对象: 没有直接的方法获取属性的数量,需要手动计算。
  4. 键值对数量:
    • Map: 可以很容易地获取键值对的数量。
    • 普通对象: 需要通过手动迭代对象的属性来计算键值对的数量。
  5. 继承:
    • Map: 是一个可迭代的对象,它的原型链上只有 Object
    • 普通对象: 除了具有 Object 的原型链外,还继承了一些额外的属性和方法。
  6. 默认迭代器:
    • Map: 默认迭代器是按插入顺序迭代键值对。
    • 普通对象: 迭代时可能不按照插入顺序,具体取决于 JavaScript 引擎的实现。
  7. 性能:
    • Map: 在某些场景下,特别是需要频繁添加或删除键值对的情况下,Map 的性能可能优于普通对象。
    • 普通对象: 在大多数情况下性能良好,但可能在特定操作上劣于 Map

总的来说,如果需要使用非字符串类型的键、需要按照插入顺序迭代键值对、或者需要更丰富的 API(如size属性),则使用Map更合适。如果只需要简单的键值对集合,并且键都是字符串,普通对象可能足够了。

Map Set 和 Object Array 有什么区别

  • Map 有序结构, key 为任意类型。 Object 无序结构,key 为两种类型(字符串类型,Symbol类型)
  • Set 可以去重
  • MapSetObjectArray 整体执行效率要高
转摘分享请注明出处

vue动态组件实现原理

async/await与Promise的关系