Array
,ES6
和Array.of()
中有Array.from()
两种新方法。在page中提到了它们的不同用法。
但是,我对此line
中Array.of
的使用感到困惑
// usage of Array.of
console.log(
Array.of( "things", "that", "aren't", "currently", "an", "array" )
); // ["things", "that", "aren't", "currently", "an", "array"]
如果我们按以下方式执行该操作,
console.log(
[ "things", "that", "aren't", "currently", "an", "array" ]
); // ["things", "that", "aren't", "currently", "an", "array"]
我们可以获得与console.log(Array.of(...))
相同的结果。在这里使用Array.of
的任何好处?
还与此line
中Array.from
的使用相混淆
var divs = document.querySelectorAll("div");
console.log(
Array.from( divs )
);
如果上述代码中没有Array.from
,该怎么办?
var arr = [1, 2, 3];
console.log(Array.from(arr)); // [1, 2, 3]
console.log(arr); // [1, 2, 3]
在这里使用Array.from
的任何好处?
答案 0 :(得分:5)
Brendan eich说(Source):
Dmitry A. Soshnikov写道:
Brendan Eich写道:
所以Array.of的目标是提供一个与之不同的构造函数 数组,没有Array(42)的疯狂特例,其中 预设长度(以及预分配实现的提示)但是 在[0,长度]留下洞。
我仍然没有看到它在手动枚举中会有什么帮助 可以直接传递给数组初始化器括号的项目。 我们在这里列举(手工)项目,对吗? -
Array.of(1, 2, 3)
。和 我们在这里枚举项目(也用手) -[1, 2, 3]
。区别 是第二种情况在语法上更优雅和含糖 也不需要分配不需要的功能激活 call-stack frame等。这一切都是真的,但除此之外。用例是你不能的时候 写一个文字,因为你传递的函数 - 构造为 一个funarg,最终的调用者只能通过一个数字arg,或 几个args。在这种情况下,Array将不会做正确的事情 一号arg案例。
这就是
Array.of
的原因。
示例:
// Array.of(42) creates an array with a single element, 42, whereas Array(42) creates an array with 42 elements, each of which is undefined.
console.log(new Array(42));
console.log(Array.of(42));
Array.from()
方法从类似数组或可迭代对象创建一个新的Array实例。
例如:
var m = new Map([[1, 2], [2, 4], [4, 8]]);
console.log("m is:");
console.log(m);
var _from = Array.from(m);
console.log("After .from: ");
console.log(_from);