Object.assign(...as) 更改输入参数

2023-12-04

Object.assign(...as)似乎改变了输入参数。例子:

const as = [{a:1}, {b:2}, {c:3}];
const aObj = Object.assign(...as);

我解构一个对象文字数组作为分配函数的参数。 我省略了console.log声明。这是节点 13.7 的标准输出:

和之前一样分配:[ { a: 1 }, { b: 2 }, { c: 3 } ]

aObj: { a: 1, b: 2, c: 3 }

分配后:[ { a: 1, b: 2, c: 3 }, { b: 2 }, { c: 3 } ]

读者可能会注意到as第一个元素已整体更改。 更改新数组bs元素到不可变对象(使用freeze)

const bs = [{a:1}, {b:2}, {c:3}];
[0, 1, 2].map(k => Object.freeze(bs[k]));
const bObj = Object.assign(...bs);

导致错误:

类型错误:无法添加属性 b,对象不可扩展 at Function.assign ()

这表明论点确实正在改变。

真正让我困惑的是,即使绑定我的数组,cs,通过将其柯里化为一个函数(我认为你在 JS 中称其为闭包)

const cs = [{a:1}, {b:2}, {c:3}];
const f = (xs) => Object.assign(...xs);
const g = () => f(cs);                            

const cObj = g();

returns:

赋值前的 cs:[ { a: 1 }, { b: 2 }, { c: 3 } ] cObj: { a: 1, b: 2, c: 3 } 分配后的 cs:[ { a: 1, b: 2, c: 3 }, { b: 2 }, { c: 3 } ]

这里出了什么问题?以及如何安全使用Object.assign而不破坏它的第一个论点?


Object.assign不是一个纯函数,它重写了它的第一个参数target.

这是它的条目MDN:

对象.分配(目标,...源)

参数

target

目标对象——源属性的应用对象,修改后返回。

sources

源对象 — 包含要应用的属性的对象。

返回值

目标对象。

关键词是“[目标]返回修改后"。为了避免这种情况,请传递一个空对象文字{}作为第一个参数:

const aObj = Object.assign({}, ...as);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Object.assign(...as) 更改输入参数 的相关文章

  • 是否可以禁用特定 jQuery Ajax 调用的 Turbolinks 以防止页面刷新和滚动?

    我有一个 Rails 5 应用程序 非常想使用 Turbolinks 在应用程序中 有几个 PATCH ajax 调用 它们只是用新数据更新服务器 但不需要担心更新页面的状态 每当这些 ajax 请求返回时 Turbolinks 就会刷新页
  • 我可以从 HTTP 请求中找到无线接入点的 BSSID(MAC 地址)吗?

    假设有人在咖啡店里无线连接到互联网 并向 johnsveryownserver com 发送 HTTP 请求 服务器端 有什么方法可以确定我的MAC地址吗 无线接入点他们连接到什么 请注意 我对他们机器的 MAC 地址不感兴趣 如果我无法使
  • 限制文本区域中每行的字符数

    我整个周末都在寻找解决这个难题的方法 但尚未找到一个可以正常工作的解决方案 我想要实现的是限制文本区域中每行的字符数 不是相同地限制它们 而是我选择的每行不同的字符数 例如 我只想在我的文本区域中包含 4 行 第 1 2 和 3 行将限制为
  • 使用 Javascript 在 Imacros 中循环

    我如何使用 javascript 循环 imm imacros 脚本 我搜索了一下 发现了这个 for i 0 i lt n i iimPlay marconame iim 但当我使用它时 我的浏览器 Firefox 18 挂起 for i
  • 将 jquery-mobile 与 Webpack 结合使用

    我正在尝试使用 webpack 加载 jquery mobile 但到目前为止还没有运气 我知道 jquery mobile 依赖于 jquery ui 而 jquery ui 又依赖于 jquery 如何在 Webpack 中设置这样的场
  • 将 Sweet Alert 弹出窗口添加到 React 组件中的按钮

    我为 Bootstrap 和 React 找到了这个完美的 Sweet Alert 模块 我在 Meteor 应用程序中使用它 http djorg83 github io react bootstrap sweetalert http d
  • 响应式网格布局框架[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 创建 Cookie 时需要帮助

    我有一个名为yes和另一个名叫no
  • 保存/导出Chrome的JavaScript控制台输入历史记录

    无论如何 我可以保存或导出 JavaScript 控制台的历史记录吗 input 控制台历史记录 在 Google Chrome 中 我不想保存输出或错误 因此将鼠标悬停在控制台框上 右键单击并选择Save as 不是解决方案 我不想每次都
  • 使react-leaflet能够离线使用

    我一直在使用反应传单 https github com PaulLeCam react leaflet图书馆 到目前为止运作良好 现在我希望网站预加载尽可能多的图块 以便网络应用程序 也是 PWA 可以在没有互联网的情况下使用 我找到了一些
  • iframe 重新加载按钮

    我浏览了很多网站 但似乎没有一个能正常工作 或者我不明白它们 我想要一个刷新某个 iframe 的简单按钮 该按钮将位于父页面上 并且 iframe 名称为 Right 有很多方法可以做到这一点 假设这个iframe markup 我们可以
  • KeyboardEvent.keyCode 已弃用。这在实践中意味着什么?

    根据 MDN 我们绝对应该not正在使用 keyCode财产 它已被弃用 https developer mozilla org en US docs Web API KeyboardEvent keyCode https develope
  • 访问 TypeScript 数组的最后一个元素

    TypeScript 中有访问数组最后一个元素的符号吗 在 Ruby 中我可以说 array 1 有类似的东西吗 您可以通过索引访问数组元素 数组中最后一个元素的索引将是数组的长度 1 因为索引是从零开始的 这应该有效 var items
  • jQuery 选择器:为什么 $("#id").find("p") 比 $("#id p") 更快

    该页面的作者 http 24ways org 2011 your jquery now with less suck http 24ways org 2011 your jquery now with less suck断言 jQuery
  • 如何清除WebGL中的矩形区域?

    WebGL 有一个clear清除整个表面的方法 清除表面的特定矩形的最佳方法是什么 例如 我想将一个从 50 50 开始的 100x100 像素框设置为全零 ARGB 0 0 0 0 我现在能想到的就是用一个写入零的片段着色器绘制一个四边形
  • 使水平滚动条始终可见,即使底部不在视图中

    我将用一个片段来开始这个问题 该片段几乎显示了我想要完成的任务 wrapper overflow hidden display flex sidebar min width 200px background 333 color FFF co
  • Keycloak javascript 适配器 `keycloak.init` 加载 404 iframe

    我正在尝试使用 javascript 适配器将 Keycloak 集成到我的客户端应用程序keycloak js 但是 我似乎无法让它发挥作用 这是我的代码 const keycloak new Keycloak realm my real
  • 如何在网页上实现文件上传进度条?

    当用户将文件上传到我的网络应用程序时 我想显示比动画 gif 更有意义的内容 我还有哪些可能性 编辑 我正在使用 Net 但我不介意是否有人向我展示与平台无关的版本 如果您对这一切在客户端通常如何工作感兴趣 就是这样 所有解决方案都通过 J
  • 替换两个引号之间的字符串

    我想转动一根绳子str hello my name is michael what s your s into hello my name is span class name michael span 我怎样才能在 JavaScript
  • Express.js Passport认证自动失败跳过策略

    UPDATE 我已将代码从护照本地注册内部移至单独的处理程序 并且运行良好 问题在于 Passport 和本地注册的使用 但我不知道为什么 我使用 Node js Express Passport 进行身份验证和注册设置 这是以前使用过的标

随机推荐

  • sed 在两个标签之间查找并替换多行

    我想找到并替换一个模式 text hold1 hold2
  • Flash Builder - 如何构建或包含 SWC

    我试图在这里重新创建本教程的现代化版本 但我在构建和引用 SWC 文件以包含在我的 Flash Builder 项目中时遇到问题 每当我尝试引用 SWC 时 Flash 都会说它 不是编译时常量 任何人都可以帮助我构建 SWC 的过程 主要
  • Zend框架文件上传非法上传

    我正在尝试使用其他文本字段以普通形式上传文件 到目前为止 文件被上传到临时文件夹 但没有上传到我的目标文件夹 我总是收到此错误 文件 上传 被非法上传 这可能是一次可能的攻击 我已经检查了临时文件的文件名 并且在正确的文件夹中具有正确的 u
  • PHP - 使用正则表达式模式删除中间的短代码和内容

    我有以下字符串 text My example text shortcode name content of shortcode shortcode name is cool 以及以下模式 pattern shortcode name 它给
  • Maven 下载的扩展名为 .lastUpdated

    我有一个带有 m2eclipse 和 subversive 的 Eclipse 设置 我从svn导入了maven2项目 但我收到错误消息 提示缺少一大堆工件 例如 缺少工件 org springframework spring test j
  • 在javascript中-1是真还是假?

    当我使用indexOf时 我无法确定 1在javascript中是真还是假 let a abc indexOf abc let b def indexOf abc console log a 0 console log b 1 consol
  • 灵活的 App Engine + 应用程序身份 (Python)

    有没有办法移植功能 from google appengine api import app identity from google appengine api import urlfetch 在灵活的环境中 我有一个在 Flex 环境上
  • C# WPF 将英文数字转换为阿拉伯数字

    我需要为我正在开发的应用程序显示阿拉伯数字字符的英文双精度字符 这是一个保存双精度数的示例类 public class Class1 private double someDouble 0 874 public double SomeDou
  • vb.net 如何以相反的字母数字顺序列出目录中的文件集合,与文件资源管理器>名称降序相同

    如何以与文件资源管理器名称倒序相同的反向字母数字顺序对目录文件路径列表进行排序 当单击 名称 两次时 当 后面的位数不同时 Array Sort 方法无法正确对文件名进行排序 例如 当视图按名称顺序排列时 文件名 Osopcoz 777 1
  • 换行到下一行时元素重叠

    当这些按钮换行到下一行时 如何防止它们彼此重叠 button link background 4479BA border solid 1px 20538D border radius 4px box shadow inset 0 1px 0
  • 使用 yum 下载包的所有依赖项的 RPM

    我正在尝试在我的系统上创建一个本地 yum 存储库 其中包含主要来自 CentOS 基础存储库的各种软件包 默认情况下 托管 yum 存储库的服务器不一定安装与将使用 yum 存储库的服务器相同的基础软件包 出于这个原因 我需要确保我的存储
  • 在 Linux 之外解析/评估/生成 CrontabExpressions?

    我正在构建一些需要调度输入的软件 我真的很想重新使用 crontab 的设计 因为它很有效 crontab 表达式可以很简单 5 每五分钟运行一次 或更复杂2 59 3 1 9 22 11 26 1 6 2003 2003 年 1 月至 6
  • xlsxwriter 按公式条件进行条件格式化

    我想将格式应用于列中的单元格 行索引为 5 7 8 9 10 11 和 13 我正在使用的代码如下 worksheet conditional format C4 C14 type formula criteria ISNUMBER MAT
  • 通过 PIL 使用多处理

    我有一些代码可以对一堆 Python 图像库 PIL 图像对象执行 独立 操作 我想尝试使用并行处理来加快速度 因此我阅读了下面的多处理模块 http docs python org library multiprocessing html
  • 继承类中静态方法的自引用返回类型

    With 多态这个正如我发现的 在 TypeScript 1 7 中here 我们可以在类中定义一个方法 其返回类型为this 并且自动地 任何扩展该类并继承该方法的类都会将其返回类型设置为各自的this类型 就像这样 class Mode
  • 如何使用正则表达式格式化 f 字符串?

    我有一些最初用加号连接并包含正则表达式字符串的字符串 这是一个例子 Level 4 re sub r w A Z r 1 2 talents 1 n n 但是 我一直想使用更正确的格式 我对 f 弦做了一些研究 我想在这里使用它们 我这样尝
  • 在Java中如何在没有任何缓冲的情况下读取文件?

    我正在解决 Programming Pearls 第 2 版第 1 栏中的问题 其中一个问题涉及编写一个程序 该程序仅使用大约 1 MB 的内存来将文件的内容存储为位数组 其中每个位代表是否或文件中不存在 7 位数字 由于 Java 是我最
  • Octave - 内存不足或维度对于 Octave 的索引类型来说太大

    我知道有 3 个问题具有类似的异常消息 不幸的是 没有一个问题得到解答 评论也无法解决我的问题 我在 Windows 10 系统上使用 64 位版本的 Octave 4 2 1 总共有 16 GB RAM 运行时大约有 11 GB 可用空间
  • 如何在Android中检查wifi是否真正连接

    我希望我的 Android 设备连接到 WiFi 热点 我创建了一个新的wificonfiguration并将其添加到wifimanager this wificonfiguration has NetworkId 然后我调用该函数wifi
  • Object.assign(...as) 更改输入参数

    Object assign as 似乎改变了输入参数 例子 const as a 1 b 2 c 3 const aObj Object assign as 我解构一个对象文字数组作为分配函数的参数 我省略了console log声明 这是