首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript的(ES6) Array.of()用例是什么?

Javascript的(ES6) Array.of()用例是什么?
EN

Stack Overflow用户
提问于 2015-07-28 20:24:28
回答 4查看 297关注 0票数 3

我偶然发现了新的Array.of()方法,该方法已经在ES6中完成,我想知道什么时候可以使用:

代码语言:javascript
复制
var a = Array.of('foo', 'bar');

超过:

代码语言:javascript
复制
var b = ['foo', 'bar'],
    c = new Array('foo', 'bar');
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-07-28 20:30:55

用数字实例化Array会创建一个具有这么多插槽的数组。

代码语言:javascript
复制
new Array(2);
> [undefined x 2]

使用Array.of实例化会创建一个包含这些元素的数组。

代码语言:javascript
复制
Array.of(2)
> [2]

Array.of的目的是解决想要传递稍后构造的类型的问题,在特殊情况下,数组在接收单个参数时是有问题的。例如:

代码语言:javascript
复制
function build(myItem, arg){
  return new myItem(arg);
}

这将使:

代码语言:javascript
复制
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作为示例:

代码语言:javascript
复制
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始终如一地做你想做的事情。

票数 10
EN

Stack Overflow用户

发布于 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

票数 2
EN

Stack Overflow用户

发布于 2015-07-28 20:35:25

它基本上修正了Array构造函数,当您传递一个数字时,它有一个特例。

来自原提案

Array.of提供了一个构造函数,与Array不同,它没有new Array(42)的特例,它预置length (以及预分配实现的提示),但在[0, length)中留下漏洞。 用例是当您不能编写一个文字时,因为您将一个函数-构造作为funarg传递,而最终的调用者可能只传递一个数字arg,或者几个arg。

它也有助于子类化,在子类中,它可以用作数组子类实例的“文字形式”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31686360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档