一、数组扩展
1.Array.from()
作用:用于将类数组对象转为标准数组(类数组对象Array-like-object,可遍历的对象 iterable)
语法:
var doms = document.getElementsByTagName('div');
console.log(doms, [].slice.call(doms), Array.from(doms));
function ff(){
var arr=Array.from(arguments);
}
from方法可以接受第二个参数,作用类似于map,用来对数组的每一个元素进行处理,将结果放入一个新的数组中(映射)
from可以将各种值转为数组,拥有map的功能,只要有一个原始的数组解构,就可以先对其进行处理,然后转为一个标准的数组,最后可以使用新数组调用数组的各种方法
from将字符串转为数组,返回字符串长度
使用es5如何将字符串转为数组? split 使用split转的话。会将大于uffff的unicode编码认为是两个字符
使用from。由于其可以识别各种unicode编码,可以避免将大于uffff的编码算作两个字符的bug
2.Array.of()
用于将一组值转为数组,定义数组,主要用于弥补Array()构造函数的不足之处(Array()构造函数会因为参数的不同,做不同的处理,参数个数大于2,才能真正的生成一个数组)
如果使用of替代Array(),Array.of()总会返回一个新的数组,如果没有参数就是一个空数组
3.copyWithin()该方法是数组实例化的方法,作用:将当前数组内部指定范围内容的成员复制到其他位置(会覆盖其他位置的元素)
语法:[1,2,3,4].copyWithin(target,start,end)
target:必须,从这个位置开始替换
start:可选,从这个位置开始读取,默认是0,负值表示倒着数,最后一个元素表示-1
end:可选,表示读取大这个位置结束,默认值是数组的长度,负值表示倒序。不包含这个位置的元素
eg:[1,2,3,4,5,6,7,8,9].copyWithin(6,0,3);
==>[1,2,3,4,5,6,1,2,3]
4.find()和findIndex()
数组实例化方法,用于找出第一个复合条件的元素,参数是回调函数
原理:将所有元素一次执行回调函数,找到第一个返回true的元素,并将该元素返回,结束遍历,如果没有找到返回出的元素,结果返回undefined
find方法的回调函数 可以接受三个参数。分别是:值,下标,原数组;
findIndex()数组实例化对象的方法,用法与find一样,返回第一个复合条件的元素的下标,如果没有找到符合条件的元素,返回-1
5.fill() 填充
使用给定的值,填充一个数组,fill方法用于空数组初始化非常方便,数组中已经有的元素将会被全部抹掉
fill()有三个参数“
[1,2,3,4,5,6].fill('a',3,5);
a:表示填充的内容
3,5:表示填充的开始和结束位置,包括3不包括5
6.includes()
返回一个布尔值,用于判断数组中是否包含某一个元素,包含返回真,不包含返回假,与字符串的includes方法类似
可以接受第二个参数,表示从哪个位置开始搜索,默认是0,负数表示到这来,如果超过数组长度,则认为是从0开始
7.数组的空位
数组的空位指的是在数组的某个位置上没有任何值,比如:new Array(3) //[,,];
注意:空位不是undefined,如果一个位置上是undefined,说明这个位置上是有值的
es5:
大部分情况会跳过空位
forEach().filter(),every(),some()等遍历方法会直接跳过空位
map() 会跳过空位,但是会保留这个值
join() 头toString() 会将空位视为undefined处理,而真正的undefined和null将会被处理为空字符串‘’
es6:所有的空都是undefined
注意:由于数组中出现空值会影响数组的使用,处理方法不一致,所有工作过程中尽可能避免出现空值