一、Array.from()
1、用于将两类对象转为真正的数组,类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和Map)。
2、length属性一定要有
3、常见的类似数组的对象是DOM操作返回的NodeList集合,以及函数内部的arguments
对象
4、只要是部署了Iterator接口的数据结构,Array.from
都能将其转为数组。
5、如果参数是一个真正的数组,Array.from
会返回一个一模一样的新数组。
二、Array.of()方法
1、Array.of方法用于将一组值,转换为数组。
2、对Array构造方法的补充 //主要针对一个参数的产生的歧义 new Array(a);表示创建一个数组长度为a的新数组 new Array(a,b)表示创建数[a,b]
3、Array.of
总是返回参数值组成的数组。如果没有参数,就返回一个空数组。
4、Array.of方法可以用下面的代码模拟实现。
function ArrayOf(){ return [].slice.call(arguments); }
三、数组实例的copyWithin()
1、数组实例的copyWithin
方法,在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。也就是说,使用这个方法,会修改当前数组。
2、Array.prototype.copyWithin(target, start = 0, end = this.length)
3、它接受三个参数。这三个参数都应该是数值,如果不是,会自动转为数值。
- target(必需):从该位置开始替换数据。
- start(可选):从该位置开始读取数据,默认为0。如果为负值,表示倒数。
- end(可选):到该位置前停止读取数据,默认等于数组长度。如果为负值,表示倒数。
4、简单说就是将使用原数组的元素对原数组进行修改
四、数组实例的find()和findIndex() //分别返回value 和 index
1、数组实例的find
方法,用于找出第一个符合条件的数组成员。 //find(value,index,arr) 参数依次为当前值,当前下标,原数组;返回值是value
2、它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true
的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined
。
3、数组实例的findIndex
方法的用法与find
方法非常类似,返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1
。
4、这两个方法都可以接受第二个参数,用来绑定回调函数的this
对象。
5、另外,这两个方法都可以发现NaN
,弥补了数组的IndexOf
方法的不足。
五、数组实例的fill方法()
1、fill方法使用给定值,填充一个数组
2、fill方法还可以接受第二个和第三个参数,用于指定填充的起始位置和结束位置。
六、数组实例的entries(),keys()和values() //values有待研究
1、用于遍历数组。它们都返回一个遍历器对象,可以用for...of
循环进行遍历
2、keys()
是对键名的遍历、values()
是对键值的遍历,entries()
是对键值对的遍历。
七、数组实例的includes()
1、Array.prototype.includes方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的includes
方法类似。该方法属于ES7,但Babel转码器已经支持。
七、数组实例的includes()
1、Array.prototype.includes方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的includes
方法类似。该方法属于ES7,但Babel转码器已经支持。
2、该方法的第二个参数表示搜索的起始位置,默认为0。如果第二个参数为负数,则表示倒数的位置,如果这时它大于数组长度(比如第二个参数为-4,但数组长度为3),则会重置为从0开始。
3、没有该方法之前,我们通常使用数组的indexOf
方法,检查是否包含某个值。indexOf方法有两个缺点,一是不够语义化,它的含义是找到参数值的第一个出现位置,所以要去比较是否不等于-1,表达起来不够直观。二是,它内部使用严格相当运算符(===)进行判断,这会导致对NaN
的误判。
八、数组的空位
1、数组的空位指,数组的某一个位置没有任何值。比如,Array
构造函数返回的数组都是空位。
2、注意,空位不是undefined
,一个位置的值等于undefined
,依然是有值的。空位是没有任何值,in
运算符可以说明这一点。
3、ES5对空位的处理,大多数情况下会忽略空位:
forEach()
,filter()
,every()
和some()
都会跳过空位。map()
会跳过空位,但会保留这个值join()
和toString()
会将空位视为undefined
,而undefined
和null
会被处理成空字符串。
4、ES6则是明确将空位转为undefined
。
5、Array.from方法会将数组的空位,转为undefined
,也就是说,这个方法不会忽略空位。
6、扩展运算符(...
)也会将空位转为undefined
。
7、copyWithin()会连空位一起拷贝。
8、fill()会将空位视为正常的数组位置。
9、for...of循环也会遍历空位。