我偶然发现了新的Array.of()方法,该方法已经在ES6中完成,我想知道什么时候可以使用:
var a = Array.of('foo', 'bar');超过:
var b = ['foo', 'bar'],
c = new Array('foo', 'bar');发布于 2015-07-28 20:30:55
用数字实例化Array会创建一个具有这么多插槽的数组。
new Array(2);
> [undefined x 2]使用Array.of实例化会创建一个包含这些元素的数组。
Array.of(2)
> [2]Array.of的目的是解决想要传递稍后构造的类型的问题,在特殊情况下,数组在接收单个参数时是有问题的。例如:
function build(myItem, arg){
return new myItem(arg);
}这将使:
console.log(build(Array, 2));
> [undefined x 2]
// ??? Can't pass the literal definition:
//console.log(build([, 1))
console.log(build(Array.of, 2));
> [2]或者使用更多的ES6作为示例:
var params = [2,3];
console.log(new Array(...params));
// [2,3]
console.log(new Array.of(...params));
// [2,3]
params = [2];
console.log(new Array(...params));
// [undefined x2]
console.log(new Array.of(...params));
// [2]Array.of始终如一地做你想做的事情。
发布于 2015-07-28 20:33:47
我为您搜索了它,第一个结果有一个很好的例子:
Array.of(...items) 如果要将多个值转换为数组,则应该始终使用数组文字,特别是因为如果有一个值是数字,则数组构造函数不能正常工作(在这种情况下是更多信息): 新数组( 3,11,8) // => 3,11,8新数组(3) // =>,新数组(3.1) // => RangeError:无效数组长度 但是,如何将值转换为Array的子构造函数的实例呢?这就是
Array.of()帮助您的地方(请记住,数组的子构造函数继承了所有的数组方法,包括of())。 类MyArray扩展数组{.} console.log(MyArray.of(3,11,8) MyArray实例);// true console.log(MyArray.of(3).length === 1);// true
值得注意的是,Array.of()还保留了数组与TypedArray的API兼容性。对于TypedArray (Int32Array,UInt32Array等),of()是非常有用的。来自MDN
Uint8Array.of(1);// Uint8Array 1 Int8Array.of("1","2","3");// Int8Array 1,2,3 Float32Array.of(1,2,3);// Float32Array 1,2,3 Int16Array.of(未定义);// IntArray 0
https://stackoverflow.com/questions/31686360
复制相似问题