在 JS 中,const newArray = oldArray.splice(0) 的结果是否包含执行过程中添加的元素?

In JS, does the result of const newArray = oldArray.splice(0) include elements added during execution?

提问人:Anthony Luo 提问时间:9/6/2023 最后编辑:Anthony Luo 更新时间:9/6/2023 访问量:47

问:

在我的 JavaScript 代码中,我有一行代码如下所示:

const newArray = oldArray.splice(0);

我的问题是,当在执行此行期间同时进行修改时会发生什么。具体说来:oldArray

  1. 如果在执行 splice(0) 时推入新元素,这些新元素是否会包含在 ?oldArraynewArray
  2. 执行该行后,将清空,还是仍包含执行 splice(0) 期间添加的元素?oldArray

并按以下方式进行比较:

const newArray = oldArray.slice();
oldArray = oldArray.slice(newArray.length);

哪种方式更好?

我的目标是,如果新元素添加到 中,我想将它们保留在 中,我不想丢失任何数据。oldArrayoldArray

我想确保我正确地理解行为并处理潜在的并发问题。谢谢你的帮助!

我不知道如何验证我的想法。

JavaScript node.js 并发 切片 拼接

评论

2赞 Teemu 9/6/2023
"并发修改“在 JS 中是不可能的。

答:

1赞 DWORD 9/6/2023 #1

由于 JavaScript 是单线程的,因此不太可能同时对数组进行 2 次操作。 所以我看不出你提到的两种方法有什么区别。然而,变体与

const newArray = oldArray.slice();
oldArray = oldArray.slice(newArray.length);

对我来说听起来更好,因为你自己决定行为。

有关拼接和切片之间差异的更多信息,请查看此处 ;)