数组

84 阅读2分钟

Array的构造器

这是我参与8月更文挑战的第6天,活动详情查看: 8月更文挑战

Array构造器用于创建一个新的数组。 推荐对象字面量。如:var arr = []; 但是,创建一个长度为6的空数组,用对象字面量的方式是无法创建,可这样写: var a = Array(6); 或者 var b = []; b.length = 6

Array构造器根据参数不同,有如下两种不同的处理方式:

  • new Array(arg1,arg2,...) 参数长度为0或者长度大于等于2时,传入的参数将按照顺序依次成为新数组的第0项至第n项(参数长度为0时,返回空数组);
  • new Array(len),当 len 不是数值时,处理同上,返回一个只包含 len 元素一项的数组;当 len 为数值时,len 最大不能超过 32 位无符号整型,即需要小于 2 的 32 次方(len 最大为 Math.pow(2,32)),否则将抛出 RangeError。

es6新增的构造方法: Array.of() 和 Array.from()

鉴于数组的常用性,ES6 专门扩展了数组构造器 Array ,新增了 2 个方法:Array.of、Array.from。其中,Array.of 整体用得比较少;而 Array.from 具有灵活性,在平常开发中应该会经常使用。那么关于两者的使用细节你真的了解吗?下面展开来聊下这两个方法。

Array.of

Array.of 用于将参数依次转化为数组中的一项,然后返回这个新数组,而不管这个参数是数字还是其他。它基本上与 Array 构造器功能一致,唯一的区别就在单个数字参数的处理上。

比如,在下面的这几行代码中,你可以看到区别:当参数为两个时,返回的结果是一致的;当参数是一个时,Array.of 会把参数变成数组里的一项,而构造器则会生成长度和第一个参数相同的空数组。

  • Array.of(8.0); // [8]
  • Array(8.0); // [empty × 8]
  • Array.of(8.0, 5); // [8, 5]
  • Array(8.0, 5); // [8, 5]
  • Array.of('8'); // ["8"]
  • Array('8'); // ["8"] Array.from

Array.from 的设计初衷是快速便捷地基于其他对象创建新数组,准确来说就是从一个类似数组的可迭代对象中创建一个新的数组实例。其实就是,只要一个对象有迭代器,Array.from 就能把它变成一个数组(注意:是返回新的数组,不改变原对象)

语法上,Array.from 拥有 3 个参数:

  • 类似数组的对象,必选;
  • 加工函数,新生成的数组会经过该函数的加工再返回;
  • this 作用域,表示加工函数执行时 this 的值。
var obj = {0: 'a', 1: 'b', 2:'c', length: 3};
Array.from(obj, function(value, index){
  console.log(value, index, this, arguments.length);
  return value.repeat(3);   //必须指定返回值,否则返回 undefined
}, obj);