我们是否可以设置持久的默认参数,这些参数在明确更改之前一直保持设置状态?

2024-01-03

下面是一个函数fn预期结果是a, b, c在每次调用时定义fn,是否传递对象参数。如果传递设置属性的对象,则应仅为该对象设置属性。

const fn = (opts = {a:1, b:2, c:3}) => console.log(opts);

当不带参数调用时,结果是

fn() // {a: 1, b: 2, c: 3}

当使用参数调用时,例如{b:7},预期结果是

fn({b:7}) // {a: 1, b: 7, c: 3}

然而,实际结果是

fn({b:7}) // {b: 7}

通过在函数之外定义一个对象并使用,能够获得预期的结果Object.assign()在函数体内

const settings = {a: 1, b: 2, c: 3};
const fn = opts => {opts = Object.assign({}, settings, opts); console.log(opts)}
fn({b: 7}) // {a: 1, b: 7, c: 3}
fn(); // {a: 1, b: 2, c: 3}
/*
  // does not log error; does not return expected result
  const fn = (opts = Object.assign({}, settings, opts)) => console.log(opts)
 
*/

是否可以仅使用默认参数来实现上述结果,而无需在函数参数外部或函数体内定义引用对象?


也许我误解了这个问题,但您似乎正在为每个单独的属性寻找默认初始化程序。为此,您必须使用解构:

const fn = ({a = 1, b = 2, c = 3} = {}) => console.log({a, b, c});

如果您想保留任意属性,而不仅仅是那些您预先知道的属性,您可能会对对象休息/传播属性提议 https://github.com/tc39/proposal-object-rest-spread这可以让你写

const fn = ({a = 1, b = 2, c = 3, ...opts} = {}) => console.log({a, b, c, ...opts});

Can an opts变量作为单个对象引用是否可以仅使用默认参数来实现,而不需要在函数参数外部或函数体内定义要引用的对象?

不可以。参数声明只能使用(部分)参数来初始化变量,并且当没有或没有时可能使用默认值(作为语法糖)undefined参数(部分)已通过。它们无法执行无条件计算并创建从结果初始化的变量 - 这正是您在这里尝试实现的目标。

您应该为此使用函数体。

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

我们是否可以设置持久的默认参数,这些参数在明确更改之前一直保持设置状态? 的相关文章

随机推荐

  • 在 Python 中从设备名称映射到挂载点的可靠且“尽可能便携”的方式

    我希望能够获取设备名称 例如 dev disk2 并确定其安装位置 如果有 例如 mnt cdrom or Volumes RANDLABEL 在Python中 我可以做到这一点的一种方法是运行df or mount然后解析输出 但这看起来
  • 如何在 JavaScript 中模拟按键? [复制]

    这个问题在这里已经有答案了 我正在尝试找到一种模拟按键的方法 例如 当功能启动时 应按下 向下箭头 键 因此网页应稍微滚动 我只对 Chrome 感兴趣 jQuery 或纯 JS 都合适 纯 JS 会更可取 这是我尝试过的代码示例之一 va
  • 使用 find 排除子目录

    我有这样的目录结构 data abc incoming def incoming processed 123 incoming 456 incoming processed Data 目录内的所有文件夹中都有一个传入子文件夹 我想获取除 d
  • 将作品放入 Postman 但不放入 AXIOS

    这是我的 MERN 应用程序中最奇怪的事情 当我从 Postman 向我的 api 执行 PUT 时 它会工作并更新我的 api 和 mongoDB 在前端 即使控制台日志显示正确的值并且 url 相同 它也不会更新 api 任何帮助或指导
  • 是否有固定大小分配器的优雅 C++ 实现?

    我认为如果必须包含的头文件数量尽可能少 C 库就是 优雅的 我知道已经存在固定大小的分配器 例如Loki SmallObjectAllocator and boost pool 虽然两者都很优秀 但我认为它们不够优雅 也不容易无缝集成到项目
  • 我应该如何使用 pandas 处理时间序列数据中的重复时间?

    我从 API 调用返回以下内容作为更大数据集的一部分 时间 datetime datetime 2017 5 21 18 18 1 tzinfo tzutc 价格 0 052600 时间 datetime datetime 2017 5 2
  • T-SQL 如何匹配多行

    有两个表 包装表和产品表 就我而言 包装中包含多种产品 我们需要识别多个产品是否可以与包裹记录中已有的包裹匹配 一些脚本如下 DECLARE tblPackage TABLE PackageID int ProductID int INSE
  • Mailgun Laravel 发送电子邮件错误 客户端错误消息

    在 Laravel 5 1 上设置 mailgun 后 我确实收到错误消息 客户端错误响应 url https api mailgun net v3 messages mime https api mailgun net v3 messag
  • 如何在脚本化 ssh 命令中使用简单引号和双引号

    我正在编写一个小型 bash 脚本 并希望通过 ssh 执行以下命令 sudo i mysql uroot pPASSWORD execute select user host password last changed from mysq
  • ICU 资源包是否用于消息翻译资源

    我了解 ICU 的本地化部分 日期 时间和货币格式 排序规则等 当谈到消息翻译时 我看到人们说 ICU 不提供消息翻译功能 例如检查这个 SOF 问题 https stackoverflow com questions 5644412 ph
  • 工作单元模式的实现

    我首先使用 ASP NET MVC 和实体框架代码创建一个应用程序 我正在使用存储库和工作单元模式 并受到以下链接的影响 http www asp net mvc tutorials getting started with ef 5 us
  • Intellij 在新块中添加额外的行

    当我在 Intellij 中编写代码时 我经常通过键入以下类型的序列来创建新块 if test 键入左大括号会导致 Intellij 自动插入右大括号并将光标移动到两个大括号之间 if test 此时 我只需按 Enter 即可获得一个格式
  • 谷歌地图打开时的信息窗口事件

    您好 我正在使用谷歌融合表和谷歌地图 问题是我的标记显示正确 但我想在信息窗口中插入一些图像 所以问题是我进行查询来查找这些标记的位置 并且这些标记可以有许多类别 这就是为什么我无法使用合并表 当用户单击标记时 信息窗口将显示并显示标记上的
  • Java URL:未知协议“C”

    我知道有similar对这个问题的提问 比如this https stackoverflow com questions 7243550 unknown protocol c jdom a saxbuilder一 但是 在读完 类似标题的问
  • Facebook 如何禁用浏览器的集成开发人员工具?

    显然 由于最近的诈骗 开发人员工具被人们利用来发布垃圾邮件 甚至用于 破解 帐户 Facebook 屏蔽了开发者工具 我什至无法使用控制台 他们是怎么做到的 Stack Overflow 上的一篇帖子声称这是不可能的 https stack
  • Angular2 - 具有登录结构的路由器出口

    我正在构建 angular2 应用程序 目前我有一个带有导航栏 工具栏和路由器出口的主组件用于主要内容 我想为登录机制添加一个额外的页面 因此 如果用户未经过身份验证 登录页面将显示在整个屏幕上 用户登录后将导航到具有上述结构的组件 我该如
  • 使用pm2将环境变量传递给node.js

    我正在尝试将一些参数传递给由 pm2 运行的 Express 应用程序 他们的文档中没有任何提示这样做 但显然可以将一些 EV 传递到您的节点应用程序 例如SOME STUFF xxx pm2 start app js 注意 更新环境中的环
  • Spring Integration 中下游流完成后,如何从队列中一次轮询 1 条消息

    我目前正在努力提高集成流程的性能 尝试并行化消息处理 我已经使用 Java DSL 实现了所有内容 当前的集成流程从具有固定轮询器的队列通道获取消息 并通过多个处理程序依次处理该消息 直到到达最终处理程序 该处理程序会考虑前一个处理程序的每
  • 未捕获的 ReferenceError:无法处理与 Ajax 的绑定

    我有两个分层的 MVC4 NET 应用程序 带有 DAL 层和 Web 层 我在尝试将数据与 Ajax 返回的数据绑定时遇到问题 在 Html 上 我试图获取 SubcriteriaList 成员并在填写每个成员的值时为每个成员创建表 HT
  • 我们是否可以设置持久的默认参数,这些参数在明确更改之前一直保持设置状态?

    下面是一个函数fn预期结果是a b c在每次调用时定义fn 是否传递对象参数 如果传递设置属性的对象 则应仅为该对象设置属性 const fn opts a 1 b 2 c 3 gt console log opts 当不带参数调用时 结果