1.迭代器是这样的一种机制。
它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署了Iterator接口,就可以完成遍历操作(即依次处理该数据结构的成员)
Iterator的作用有三个:一是为各种数据结构,提供一个统一的、简便的访问接口;二是使得数据结构的成员能够按照某种次序排列;三是ES6创造了一种新的遍历命令for...of循环,Iterator接口主要供for...of消费。
for...of的底层实现原理其实就是可以看作一个指针对象,第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员,不断地调用指针对象的next方法,直到它指向数据结构的结束位置。
原生具备 Iterator 接口的数据结构如下 Array、Map、Set、String、TypedArray、arguments、NodeList。
2.Set
Set类似于数组,但是成员的值都是唯一的,没有重复的值。Set 本身是一个构造函数,用来生成 Set 数据结构。Set 构造函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。
添加元素:add,删除元素:delete,判断有没有某个成员:has,清空set:clear,返回set的成员个数:size
3.Map集合
Map类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。Map 可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。
创建一个Map集合,通过构造函数let res =Object.entries(obj); let map=new Map(res)
给map添加成员的方法是set,删除map成员是delete,delete可以直接删除基本数据类型的键,而删除引用数据类型需要删除引用地址。获取map的属性值:get方法。
遍历方法:可通过for...of map.keys()进行遍历,获得的是属性值,也可以通过forEach进行遍历:forEach(value,key,map)=>{},与普通的forEach的value和key的值相反。
map和object有什么区别?
1.map的键可以是任意数据类型,object的键只能是字符串或者symbol。
2.map是一个可迭代的数据结构,对象不可以直接迭代。
3.map可以通过size属性获取数据结构的长度,而对象不能直接获取
4.map循环遍历按照顺序进行输出,对象属性是无序数据结构。
4.数值拓展
Number.isFinite()对于非数值一律返回false
Number.isNaN()只有对于NaN才返回true,非NaN一律返回false。
parseInt、parseFloat在ES5中是进行强制数据类型转换,在ES6新方法中,将其移植到Number对象上面,行为完全保持不变
Number.parseInt()
Number.parseFloat()
Number.isInteger()用来判断一个数值是否为整数