以下内容是阅读阮一峰老师的《ECMAScript入门》的一些笔记
一. 扩展运算符
功能:将一个数组转化为用逗号分隔的参数序列
应用场景:
1.复制数组
2.合并数组
3.与解构赋值结合
4.字符串
5.实现了Iterator接口的对象(任何Iterator接口的对象都可以用扩展运算符转化为真正的数组)
6.Map和Set结构,Generator函数
注意:
1.扩展运算符后面可以放置表达式
2.如果扩展运算符后面是一个表达式,则不会产生任何效果
3.扩展运算符能够识别四个字节的unicode字符,如果想要正确计算字符串的长度可以先将字符串用扩展运算符转化为数组,然后计算数组的长度。
4.对于那些没有部署Iterator接口的类数组对象扩展运算符无法将其转化为真正的数组。
二.Array.from()
功能:Array.from方法将两类对象转化为真正的数组:类似数组的对象和可遍历的对象
注意:
1.如果参数是一个真正的数组则Array.from会返回一个一模一样的新数组。
2.与扩展运算的区别在于:扩展运算符背后调用的是遍历接口Symbol.iterator,如果一个对象没有部署这个接口就无法转化。而Array.from方法还支持类似数组的对象。而类似数组的对象本质是具有length属性。
3.Array.from还可以接受第二个参数,作用类似于map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。
4.Array.from还可以传入第三个参数,用来绑定this
5.Array.from也可以将字符串转化为数组来计算字符串的长度,因为它也可以正确处理Unicode字符。
三: Array.of()
功能: Array.of用于将一组值转化为数组。
注意:这个方法不会像ES5中Array方法那样会由于参数不同而导致重载。
四: 数组实例的copyWithin(target, [start], [end])
功能:在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组,这个方法会修改当前数组
注意: 三个参数都应该是树值,如果不是,会自动转化为数值。
五: 数组实例的find()和findIndex()
功能:数组实例的find方法用于找出第一个符合条件的数组成员,它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员,如果没有符合条件的成员则返回undefined。
findIndex方法的用法和find方法类似,返回第一个符合条件成员的位置,如果所有成员都不符合条件则返回-1.
注意:
1.find方法的回调函数可以接受三个参数,依次为当前的值,当前的位置,和原数组。
2.这两个方法都可以接受第二个参数,来绑定this对象。
3.与indexOf方法的不同在于findIndex方法可以通过Object.is方法识别出NaN.
六. 数组实例的fill()
功能:fill方法使用给定的值填充一个数组。
注意:
1.数组中已有的元素会被全部抹去
2.fill方法还可以接受第二个和第三个参数,用于指定起始位置和结束位置。
3.如果填充的类型为对象,那么被赋值的是同一个内存地址的对象,而不是深拷贝。
七 数组实例的entries(), keys(), values()
功能:用于遍历数组,它们都返回一个遍历器对象,keys返回的是键名的遍历、values()键值的遍历,entries()是键值对的遍历。
八 数组实例的includes()
功能: 返回一个布尔值表示某个数组中是否包含给定的值。
注意:
1.该方法的第二个参数表示搜索的起始位置,默认为0,如果大于数组的长度则会重置为0开始。
2.使用indexOf方法的缺点是:1.不够语义化 2.内部使用===会导致对NaN的误判。