Array.from
ECMAScript 2014 中有一个方法可以将参数转换为数组。
我们可以像这样使用 Array.from() 或者扩展运算符:
function sortArgs(...args) { return args.sort(function (a, b) { return a - b; }); } console.log(sortArgs(21, 5, 4, 8).toString());
Array.from() 方法用于从类数组或者可迭代对象创建一个新的、浅复制的 Array 实例。
arguments 对象是一个类数组对象,它表示执行函数时传入的参数。
要将其转换为数组,我们将在本文范围内讨论几种方法。
slice()
当slice()方法被正常调用时,表示这是一个Array,该方法迭代那个Array并正常工作。
slice() 函数中的 this 被接受为数组,因为当我们调用以下对象时,该对象会自动成为 method() 中的 this 值:
object.method();
让我们考虑以下情况:
[1,2,3].slice()
[1,2,3] 数组集将作为 slice() 中 this 的值。
但是,如果我们替换其他内容,例如,具有数字 .length 属性或者一组作为此值的数字索引的属性,它应该可以工作。
这种对象通常被称为类数组对象。
类 Array 对象意味着参数具有长度属性和从零开始索引的属性,但它没有 Array 的内置方法,例如 forEach() 和 map()。
call() 和 apply() 方法允许在函数中手动设置 this 的值。
如果将 slice() 中的 this 值设置为类似数组的对象,它会将其视为数组,并执行与数组相同的操作。
让我们看一下这个例子:
let obj = { '0': 'zero', '1': 'one', '2': 'two', '3': 'three', length: 4 }; let sliced = Array.prototype.slice.call(obj, 2); console.log(sliced);
这不是一个数组,但如果你可以将它设置为 slice() 的 this 值,那么它就会像一个数组一样工作。
以下是将参数对象设置为 this 值时 slice() 方法的工作原理。
剩下的参数
如果我们使用 ES6,其余参数可以完成任务:
function sortArgs(...args) { return args.sort(function (a, b) { return a - b; }); } console.log(sortArgs(21, 5, 4, 8).toString());
其余参数语法允许将无限数量的参数表示为数组。