问题标签 [spread-syntax]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
7066 浏览

javascript - 使用 map 时使用扩展运算符扩展数组

我不确定这是否是正确的方法,但我很好奇它是否可以做到。我有一个对象,我需要从中创建一个数组,键是项,值 id 是它在数组中重复的次数。

哪个应该使['m','m','m','m','m','s','s' ... ]

这是工作方法:

是否可以通过这种方式完成:

0 投票
1 回答
79 浏览

javascript - JavaScript 扩展语法有问题

我刚刚阅读了 ES6 传播语法的 MDN 页面,页面上的大多数示例都有效,但最后一个没有:

我在 Chrome 和 Firefox 中都试过了,而且我运行的是最新的浏览器版本,所以页面说代码应该可以工作。

谁能告诉我问题是什么?

0 投票
4 回答
71 浏览

javascript - 如何将带有 ES6 Rest 的方法添加到 JS 对象

我有一个 Person 构造函数,我想添加一个应该添加朋友的方法。我想让我的用户传递可变数量的朋友,所以我想到了 ES6 的新“休息”功能。遗憾的是,我找不到出路。这是我的第一次尝试(错误:“Uncaught TypeError: f.addFriends is not a function(...)”):

我也尝试了以下代码(没有错误,但没有添加朋友):

我究竟做错了什么?非常感谢您的帮助!

0 投票
3 回答
5552 浏览

javascript - ECMAScript 文档中的 SpreadElement 是什么?和 MDN 上的 Spread 语法一样吗?

ECMAScript 规范SpreadElement描述了

这和Spread语法一样吗

扩展语法允许在预期零个或多个参数(对于函数调用)或元素(对于数组字面量)的地方扩展诸如数组表达式或字符串之类的可迭代对象,或者在零个或多个参数的地方扩展对象表达式键值对(用于对象文字)是预期的。

句法

对于函数调用:

对于数组文字:

MDN文档中描述?

SpreadElement和,或,传播语法的用例是什么?ifSpreadElement和 spread 语法不同,它们在哪些具体方式上有所不同?

0 投票
1 回答
1086 浏览

javascript - ES6 JS 中的扩展语法如何作为函数参数工作?

好的,所以我试图了解新的价差如何作为函数参数工作。想象一个具有未知数量参数的函数并将它们加在一起。

这个功能显然有效。那么,我的问题是什么?那么这里有一些观察,然后是我的问题:

  1. 作为函数参数/参数的传播语法似乎旨在将值数组“传播”为单独的参数:

根据我所做的研究,扩展语法可用于将数组传递给不接受数组作为标准参数的函数,例如 Array.prototype.push(),而不必使用apply

但是在这种情况下传递给的数组push需要事先声明/定义(在这种情况下y

  1. 这可以通过查看函数内部参数对象的长度来确认

如果我使用addNums(1,2,3,4),arguments.length仍然 == 4。所以,该函数似乎仍然被称为addNums(1,2,3,4)

问题

我的问题是我没有addNums使用数组作为要处理的扩展语法的参数进行调用。我没有打电话addNums([1,2,3,...])我正在努力理解的行为是,似乎有一个秘密的隐藏步骤,给定一个以扩展语法作为其单个参数声明的函数:

然后用参数列表调用:

arguments对象的生成,并且创建了一个类型的变量,其名称具有扩展语法的函数参数的名称相同Array

对于更有经验的编码人员来说,这可能是显而易见的或微不足道的,但在我看来,这与迄今为止提出的用例相反,例如在一组未知长度的参数中传播一组值

实际上,我想说的是,当使用多个参数调用函数但使用扩展语法使用单个参数定义时,不是跨参数读取和拆分数组,而是扩展语法实际上类似于:Array.apply(null, arguments)或者var a = [arg1, arg2, ...]- ** 它是创造者而不是传播者 **

我的研究来源:

特别是对问题的评论“@void 主要用于函数调用,即如果 myFunc 接受未知数量的参数,我们可以将参数作为带有扩展的数组提供。像这样:myFunc(...dynamicallyGeneratedArgs)”

0 投票
2 回答
43 浏览

javascript - 如果 console.log(...arguments) 正常,为什么 var a = ...arguments 会失败?

代码 A,这没关系并记录[ 1, 2, 3 ]

代码 B,这也失败了SyntaxError: Unexpected token ... ,换行...arguments()无济于事。

我假设在这两种情况下,我们都有一个RHS查找。为什么可以传递...argumentsconsole.log(或其他函数),但不能将其分配给变量?

PS。我知道这永远不会出现在现实生活中的代码中,或者还有其他更好的解决方案。我的问题纯粹是理论/概念性的,仅限于理解为什么会发生不同的行为。

0 投票
1 回答
415 浏览

javascript - 复制反应组件属性时,传播语法会出错

我正在使用反应,我正在尝试使用传播语法。由于某种原因,它不起作用并给出错误:

知道我做错了什么吗?

0 投票
12 回答
170470 浏览

javascript - 使用扩展语法在 ES6 中进行深度复制

我正在尝试为我的 Redux 项目创建一个深度复制映射方法,该方法将使用对象而不是数组。我读到在 Redux 中,每个状态都不应该改变之前的状态。

有用:

但是它不会深度复制内部项目,因此我需要将其调整为:

这不太优雅,因为它需要知道传递了哪些对象。ES6 中有没有一种方法可以使用扩展语法来深度复制对象?

0 投票
3 回答
29643 浏览

javascript - 状态为对象数组与由 id 键入的对象

Designing the State Shape章节中,文档建议将您的状态保存在由 ID 键入的对象中:

将对象中的每个实体保存为以 ID 作为键存储,并使用 ID 从其他实体或列表中引用它。

他们继续陈述

将应用程序的状态视为数据库。

我正在处理过滤器列表的状态形状,其中一些将打开(它们显示在弹出窗口中),或者已选择选项。当我阅读“将应用程序的状态视为数据库”时,我想到将它们视为 JSON 响应,因为它将从 API(本身由数据库支持)返回。

所以我认为它是

但是,文档建议的格式更像

从理论上讲,只要数据是可序列化的(在“状态”标题下) ,这无关紧要。

所以我很高兴地使用了对象数组方法,直到我开始编写我的 reducer。

使用 object-keyed-by-id 方法(以及自由使用扩展语法),OPEN_FILTERreducer 的部分变为

而使用对象数组方法,它更冗长(并且依赖于辅助函数)

所以我的问题有三个:

1)reducer 的简单性是采用 object-keyed-by-id 方法的动机吗?这种状态形状还有其他优点吗?

2) 似乎 object-keyed-by-id 方法使得处理 API 的标准 JSON 输入/输出变得更加困难。(这就是我首先使用对象数组的原因。)因此,如果您采用这种方法,您是否只是使用一个函数在 JSON 格式和状态形状格式之间来回转换它?这似乎很笨拙。(尽管如果您提倡这种方法,那么您的部分推理是否比上面的对象数组缩减器更笨重?)

3)我知道 Dan​​ Abramov 设计的 redux 在理论上是与状态数据结构无关的(正如“按照惯例,顶级状态是一个对象或其他一些键值集合,如 Map,但从技术上讲,它可以是任何类型,”强调我的)。但是鉴于上述情况,是否只是“建议”将其保留为由 ID 键入的对象,或者我是否会遇到其他无法预料的痛点,方法是使用一组对象,使我应该中止它计划并尝试坚持使用 ID 键入的对象?

0 投票
0 回答
214 浏览

javascript - 为什么 babel 不理解 react-starter-kit 中传播运算符的这种用法?

来自react-starter-kit,一个非常流行的样板:

每当我尝试运行或构建时,这条线总是失败:

错误:

相信其他传播工作的例子。

我已经尝试了我认为是显而易见的补救措施:

  • 删除node_modules并重新安装
  • 修剪babelrc
  • 使用babelrc与不使用babelrc(本例默认为后者)
  • 不同的babel预设
  • 巫毒教

这个让我发疯,因为存储库说它可以构建并且我信任它们,但它似乎并不适合我。