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)之间有一些区别。以下是它们的主要区别:
- 键类型:- Map: 可以使用任意数据类型作为键,包括基本数据类型(如字符串、数字)以及对象、函数等。
- 普通对象: 键只能是字符串或符号。
 
- 键值对顺序:- Map: 保留插入顺序,迭代时按照插入顺序进行。
- 普通对象: 不保证属性的顺序,可能会在不同 JavaScript 引擎中有所不同。
 
- 大小属性:- Map: 有一个size属性,可以获取键值对的数量。
- 普通对象: 没有直接的方法获取属性的数量,需要手动计算。
 
- Map: 有一个
- 键值对数量:- Map: 可以很容易地获取键值对的数量。
- 普通对象: 需要通过手动迭代对象的属性来计算键值对的数量。
 
- 继承:- Map: 是一个可迭代的对象,它的原型链上只有 Object。
- 普通对象: 除了具有 Object的原型链外,还继承了一些额外的属性和方法。
 
- Map: 是一个可迭代的对象,它的原型链上只有 
- 默认迭代器:- Map: 默认迭代器是按插入顺序迭代键值对。
- 普通对象: 迭代时可能不按照插入顺序,具体取决于 JavaScript 引擎的实现。
 
- 性能:- Map: 在某些场景下,特别是需要频繁添加或删除键值对的情况下,Map的性能可能优于普通对象。
- 普通对象: 在大多数情况下性能良好,但可能在特定操作上劣于 Map。
 
- Map: 在某些场景下,特别是需要频繁添加或删除键值对的情况下,
总的来说,如果需要使用非字符串类型的键、需要按照插入顺序迭代键值对、或者需要更丰富的 API(如size属性),则使用Map更合适。如果只需要简单的键值对集合,并且键都是字符串,普通对象可能足够了。
Map Set 和 Object Array 有什么区别
- Map有序结构, key 为任意类型。- Object无序结构,- key为两种类型(字符串类型,- Symbol类型)
- Set可以去重
- Map和- Set比- Object、- Array整体执行效率要高
