javascript - 括号前的扩展运算符?

标签 javascript ecmascript-6

我正在阅读有关 array destructuring 的信息和 spread syntax来自 MDN,我偶然发现了以下示例,尽管逐步阅读了这些 Material ,但它让我有点冷漠。

给我带来麻烦的代码是这样的:

function myFunction(v, w, x, y, z) { }
var args = [0, 1];
myFunction(-1, ...args, 2, ...[3]);

我明白了 v==-1w==0x==1;和 y==2... 但是 ...[3] 是什么?

示例来自上面的扩展语法超链接。

最佳答案

您找到的示例有点做作,您可能不会在实际代码中看到它。这只是为了说明扩展参数语法 ... 适用于任何可迭代表达式,包括标准数组文字,如 [1, 2, 3]z 将是 3 因为

myFunction(-1, ...args, 2, ...[3]);

相当于

myFunction(-1, ...args, 2, 3);

...[] 在这种情况下基本上没有效果;这些值是从数组中提取出来的,所以就好像您只是将它们直接写在参数列表中一样。再举个例子,

myFunction(-1, ...args, 2, ...[3, 4, 5]);

相当于

myFunction(-1, ...args, 2, 3, 4, 5);

尽管 z 仍然是 3(45 将被忽略,因为它们是意外的额外参数)。

让我们稍微分解一下:参数列表中展开/剩余语法... 的行为在section 12.3.6.1 "Runtime Semantics: ArgumentListEvaluation" 中定义。 ECMAScript 6 的。换句话说,它本质上是说“当您在参数列表中看到 ...X 时,评估 X,然后遍历它包含的值并将每个值相加它们作为一个单独的论点”。

因此,当 JavaScript 在参数列表中看到 , 3 时,它会说“将 3 添加到参数列表”。

但是当 JavaScript 在参数列表中看到 , ...[3] 时,它会说“创建一个包含 3 的新数组,然后遍历它的每个值(仅 3)并将它们添加到参数列表中。

您在这两种情况下都在做同样的事情,但更简单的方法可能更快。

关于javascript - 括号前的扩展运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44641088/

相关文章:

javascript - 类型错误 : Cannot read property of undefined with web-sockets

reactjs - 在 React 中解构和转换

javascript - 如果没有 'new',则无法调用类构造函数 PolymerElement

javascript - 如何在一页中定义两个 Angular 应用程序/模块?

javascript - 如何确保定义 img.onload 函数的脚本在 img 之前加载?

javascript - Ajax 将数据传递到 ASP.NET Controller

javascript - 缓出计数器

javascript - Meteor 在尝试创建 ObjectID 时返回无效的十六进制字符串错误?

javascript - JavaScriptCore 和 React Native 上的 ES6

node.js - 是否可以要求一个类创建一个新实例而不必每次都调用 new ?