ES6标准为数组添加了很多新功能,例如,创建数组的新方法,创建定型数组(Typed Array)的能力等。
1、创建数组
在ES6以前,创建数组的方式主要有两种,一种是调用Array构造函数,另一种是用数组字面量语法,这两种方法均需列举数组中的元素,功能非常受限。
为了进一步简化数组的创建过程,ES6新增了Array.of()和Array.from()两个方法。
1.1 Array构造函数创建数组
//1、传入一个数值,认为是length值
let items1 = new Array(2);
console.log(items1.length);//2
console.log(items1[0]);//undefined
console.log(items1[1]);//undefined
//2、传入非数值类型,目标数组唯一项
let items2 = new Array("2");
console.log(items2.length);//1
console.log(items2[0]);//"2"
//3、传入多个值,数组的元素
let items3 = new Array(2, 3);
console.log(items3.length);//2
console.log(items3[0]);//2
console.log(items3[1]);//3
//4、传入多个值,数组的元素
let items4 = new Array(2, "3");
console.log(items4.length);//2
console.log(items4[0]);//2
console.log(items4[1]);//"3"
如果给Array构造函数,
- 传入一个数值型的值,则数组的length属性会被设为该值。
- 传入一个非数值型的值,那这个值会成为目标数据的唯一项。
- 如果传入多个值,无论值类型,都会变为数组的元素。
这个特性容易引发错误,因为你不可能总是注意传入数据的类型。
1.2 Array.of()方法
无论参数是什么类型,Array.of()方法总会创建一个包含所有参数的数组。要用Array.of()方法创建数组,只需传入你希望在数组中包含的值即可。
//1、传入一个数值,认为是length值
let items1 = Array.of(1, 2);
console.log(items1.length);//2
console.log(items1[0]);//1
console.log(items1[1]);//2
//2、传入非数值类型,目标数组唯一项
let items2 = Array.of(2);
console.log(items2.length);//1
console.log(items2[0]);//2
//3、传入多个值,数组的元素
let items3 = Array.of("2, 3");
console.log(items3.length);//2
console.log(items3[0]);//"2,3"
1.3 Array.from()方法
1.3.1 非数组对象转为数组对象
1、JavaScript不支持直接将非数组对象转换为真实数组,arguments就是一种类数组对象,如果要把它当作数组使用则必须先转换该对象的类型。例如:
function makeArray(arrayLike) {
var result = [];
for (let i = 0, len = arrayLike.length; i < len; i++) {
result.push(arrayLike[i]);
}
return result;
}
function doSomething(){
var args = makeArray(arguments);
//args是一个数组,可以使用args
}
上述方法,先是手动创建一个result数组,再将arguments对象里的每一个元素复制到新数组中。
2、下面是一种比较简单的方法,调用数组原生的slice()方法可以将非数组对象转换为数组。
function makeArray(arrayLike) {
return Array.prototype.slice.call(arrayLike);
}
function doSomething() {
var args = makeArray(arguments);
//args是一个数组,可以使用args
}
//即
var args = Array.prototype.slice.call(arguments);//args即为数组
3、更直接的方法
ES6新添加了一个语义清晰、语法简洁的新方法Array.from()来将对象转化为数组。Array.from()方法可以接受可迭代对象或类数组对象作为第一个参数,最终返回一个数组。
function doSomething(){
var args = Array.from(arguments);
}
Array.from()方法调用会基于arguments对象中的元素创建一个新数组,args是Array的一个实例,包含arguments对象中同位置的相同值。
1.3.2 映射转换
如果想要进一步转化数组,可以提供一个映射函数作为Array.from()的第二个参数。
function translate() {
return Array.from(arguments, (value) => value + 1);
}
let numbers = translate(1, 2, 3);
console.log(numbers);//2,3,4
1.3.3 用Array.from()转换可迭代对象
Array.from()方法可以处理类数组对象和可迭代对象,也就是说该方法能够将所有含有Symbol.iterator属性的对象转换为数组。例如:
let