JavaScript中改进的数组功能

本文详细介绍了JavaScript中数组的新特性,包括Array.of()和Array.from()方法,以及它们在非数组对象转数组、映射转换和处理可迭代对象中的应用。此外,还讲解了ES6引入的定型数组,包括其数值数据类型、数组缓冲区和视图操作,以及定型数组与普通数组的异同。最后,文章探讨了定型数组的高性能算术运算和适用于WebGL场景的应用。
摘要由CSDN通过智能技术生成

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 
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值