意外的解构行为,在更深层次解构时必须声明一个键两次[重复]

2024-05-02

我在 ES6 中进行一些解构,遇到了意想不到的情况。这是所发生事件的一个简单版本。

let obj = {x: {y: 5}};
let {x: {y}} = obj;

console.log(x); // x is not defined
console.log(y); // 5

在我的用例中,我需要访问两者x and y。我本以为x也被解构了。相反,为了获得预期的效果,我必须这样做:

let obj = {x: {y: 5}};
let {x, x: {y}} = obj;

console.log(x); // {"y":5}
console.log(y); // 5

不过,我认为{x, x: {y}}看起来很奇怪而且不直观。是否存在我不知道的解构秘密,或者这只是一个微小的解构陷阱?


This:

let {x: {y}} = obj;

是以下缩写:

let {x: {y: y}} = obj;

解构将冒号的左侧(键)与数据进行匹配,并将结果放入右侧(赋值目标,通常是变量)。所以,x只是这里的关键,而y既是键又是新声明的变量。

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

意外的解构行为,在更深层次解构时必须声明一个键两次[重复] 的相关文章

  • 静态元素交互

    我有以下代码 Enabled id gt let removal null if this props disabled removal span gt this onDelete id gt x span return removal 它
  • Ecma6,Object.assign 不进行深层复制[重复]

    这个问题在这里已经有答案了 dst a 1 src edf zyx right Object assign dst src src edf zyx wrong console log dst edf zyx 我期待看到 right 作为输出
  • 使用 Jest 模拟 Es6 类

    我正在尝试使用接收参数的构造函数来模拟 ES6 类 然后使用 Jest 模拟该类上的不同类函数以继续测试 问题是我找不到任何有关如何解决此问题的文档 我已经看过了这个帖子 https stackoverflow com questions
  • 模拟器卡在从 10.0.2.2:8081 加载时,有什么问题吗?

    I am working on a react native project and I run it on emulator android AVD manager 我跑了adb 反向 tcp 8081 tcp 8081在 cmd 但我的
  • 如何修复 Eslint 错误“prefer-destructuring”?

    我想像这样缩短 ES6 中的对象文字 const loc this props local 原因是loc foo 比打字容易得多this props local foo 但现在 ESLint 抱怨道 使用对象解构 prefer destru
  • 意外的解构行为,在更深层次解构时必须声明一个键两次[重复]

    这个问题在这里已经有答案了 我在 ES6 中进行一些解构 遇到了意想不到的情况 这是所发生事件的一个简单版本 let obj x y 5 let x y obj console log x x is not defined console
  • 如何在 Node CLI 程序中使用 babel?

    我正在 Node 中编写一个小型 CLI 工具 并希望使用 ES6 来实现 index js 看起来像 usr bin env node require babel register module exports require app 我
  • 多个 if else 条件的替代方法[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我有多个条件需要检查和执行 如下所示 if date current date source s3 table name Table1 else
  • 轮询时承诺异步等待

    我正在尝试将使用承诺 和轮询 的函数转换为异步函数 但我不太确定它是如何工作的 我有这个 function myFunction return new Promise resolve gt stuff here var poll setIn
  • JavaScript 中的 Promise.all:如何获取所有 Promise 的解析值?

    我编写了以下node js文件 var csv require csv parser var fs require fs var Promise require bluebird var filename devices csv var d
  • JS中如何过滤多个字符串? [复制]

    这个问题在这里已经有答案了 我希望能够过滤数组中的多个字符串 类型 例如我想过滤类型meat并输入fruit在下面的数据结构中 我想要实现的是过滤数据对象 const data type meat food hamburger type f
  • Javascript - 模板字符串不能漂亮地打印对象

    我可以使用 ES6 模板字符串来漂亮地打印 javascript 对象吗 这是来自 React Native 项目 其中console log 输出到 Chrome 调试工具 我想要的是 const description App open
  • Javascript:将 JSON 字符串转换为 ES6 映射或其他形式以保留键的顺序

    ES6 或后续版本 Javascript 或 TypeScript 中是否有原生 内置 方法将 JSON 字符串转换为 ES6 映射 或者可以选择要实现的自制解析器 目标是保留 JSON 字符串编码对象的键顺序 Note 我故意不使用 解析
  • 从平面数组创建嵌套对象

    我目前有一个对象数组 我正在尝试将其重塑为嵌套对象ID作为对象键 并将其作为目标ID与parentid 如果不是 0 我尝试了几种方法 但我很挣扎 主要绊脚石for me是超过一两层深度的任何东西 理想情况下 我需要它是动态的 这样它就可以
  • webpack 加载器并包含

    我是 webpack 的新手 我正在尝试了解加载器及其属性 例如测试 加载器 包含等 这是我在 google 中找到的 webpack config js 的示例片段 module loaders test js loader babel
  • 是否可以动态导入模块?

    我有很多角度组件的导入 看起来我可以编写一个函数来简化导入 我只是不知道怎么做 但这应该很简单 进口样本 import DashboardComponent from app components dashboard dashboard c
  • 如何将数组与 setState 一起使用?

    我目前正在使用以下命令将数组映射到 setState 但没有设置任何内容 也没有记录任何错误 如果我明确地逐行写出它 它就会起作用 关于如何解决这个问题有什么想法或建议吗 使用数组设置状态 不设置状态 const myData messag
  • 为什么在 ES6 中不应该使用 import all

    所以我最近开始学习 React 并注意到所有文档都有类似的导入 import Apples Bananas Oranges from fruits 但是在研究 React 时我发现这种语法也同样有效 import as Fruits fro
  • 开玩笑错误意外的令牌...(ES6)

    每当我在命令行中运行 jest 时 都会收到以下错误 Test suite failed to run Users
  • JavaScript - 类根据条件扩展

    事情是这样的 我有一个名为 A 的主课 我希望这个班级能够扩展 B 级 class A extends B 但事实上 我希望 B 类在特定条件下扩展 C D 或 E class B extends B1 or class B extends

随机推荐