for..in可以将JavaScript中的对象的属性依次循环出来,当for..in作用于数组时得到的是该元素的下标,且该下标是一个String对象而不是一个Number对象。(注意:for..in实际上是历史遗留问题,其遍历的实际上是对象的属性,之所以能够遍历数组,是因为数组实际上是一个对象,而其属性就是下标,所以使用for..in遍历数组得到的下标是String类型)
2、for..of
for..of就是为了遍历集合而专门设计的,它只遍历数组的元素,并且当for..of直接遍历对象时会报错,for..of用于遍历对象需要使用Object.keys()才能正确遍历其属性(而Object.keys()方法实际上是将对象的属性键值以数组的形式返回了回来,实际上也是遍历数组。)
for-of循环每一次都会调用可迭代对象的next()方法,并将迭代器返回的结果对象的value属性存储在一个变量中,循环将持续执行这一过程直到返回对象的done属性为true。
图片说明
图片说明
3.forEach是Iterable的内置方法,是一个高阶函数,其接受一个函数作为参数,每次迭代就回调该函数。是遍历Iterable(Array,Map,Set)最好的方式(但是相对于for..of有一个坏处就是不能通过break退出循环)
1.
array: 数组对象,是使用单独的变量名来存储一系列的值
2.
Set: ES6 提供了新的数据结构。它类似于数组,但是成员的值都是唯一的,没有重复的值
Set本身是一个构造函数,用来生成 Set 数据结构。
Set函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。
// set值没有索引,无法通过索引找到某一项的值
size属性: 返回Set实例的成员总数。
add(value):添加某个值,返回 Set 结构本身
delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
has(value):返回一个布尔值,表示该值是否为Set的成员。
clear():清除所有成员,没有返回值。
Set转Array,使用展开运算符。
3.
Map: ES6 提供了新的数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。Map 结构提供了“值—值”的对应。
size 属性: 返回 Map 结构的成员总数。
set(key, value): set方法设置键名key对应的键值为value,然后返回整个 Map 结构。如果key已经有值,则键值会被更新,否则就新生成该键。返回的是当前的Map对象
get(key): get方法读取key对应的键值,如果找不到key,返回undefined。
has(key): 返回一个布尔值,表示某个键是否在当前 Map 对象之中。
delete(key): 删除某个键,返回true。如果删除失败,返回false。
clear(): clear方法清除所有成员,没有返回值。

WeakMap,WeakSet没有entries、keys和values等方法,只能用对象作为键,其余和Map,Set相同

创建和使用这两个类是为了性能,WeakSet和WeakMap是弱化的(用对象作为键),没有强应用的键,使得js的垃圾回收器可以从中清除整个入口。