为什么解构赋值不知道空值是假值并使用默认值? [复制]

2024-02-14

假设我们有一个函数使用参数内部对象中的一些键:

const api = ({ data: { name } = {} }) =>
  `My name is ${name}.`;

如果我们通过{}, { data: '' }, { data: 0 }, { data: NaN } or { data: undefined }我们将看到该函数:

'My name is undefined.'

并且不会看到任何错误,因为解构赋值会看到data是假的并且使用 = {}相反,然后nameundefined.

Question: 为什么当我们通过时解构赋值会返回错误null数据键?

api({ data: null });

// ==> Uncaught TypeError: Cannot destructure property 'name' of '{}' as it is null.

根据MDN docs https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment关于对象解构中的默认值:

可以为变量分配默认值,以防该值 从对象中拉出是未定义的。

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

为什么解构赋值不知道空值是假值并使用默认值? [复制] 的相关文章

  • 使用 fb.ui 时如何检测用户取消共享

    我正在使用提供的文档here https developers facebook com docs sharing reference share dialog使用以下代码 共享对话框正确显示 问题是我无法区分用户在对话框中执行的 取消 和
  • Vue.js + Element UI:在更改时获取“event.target”

    我无法获取在事件处理程序中触发事件的 html 字段 在 javascript 中是event target 我有一个表格 附加到更改事件函数的输入元素 管理更改事件的函数 我的代码如下 var Main methods change pa
  • 如何避免多系列折线图d3.js的工具提示重叠

    我已经在多系列折线图上创建了工具提示 如下所示在这里回答 https stackoverflow com questions 34886070 d3 js multiseries line chart with mouseover tool
  • 禁用 chrome React DevTools 以进行生产

    我正在尝试使用 gulp 和 envify 对我的 React 应用程序进行浏览器化以设置 NODE ENV 因此 我可以删除反应警告 控制台中的错误报告 甚至我的代码来禁用某些功能 例如react addons perf的要求 而且效果很
  • YouTube 360​​ 视频 iframe 无法在移动浏览器中工作

    我正在尝试为 YouTube 360 视频获取嵌入的 iframe 以便在我的移动网站上播放 它在桌面浏览器上运行良好 但在移动浏览器中我只能播放平面立体视图 我可以确认它绝对是一个 HTML5 播放器 这显然是其他人正在经历的一个未解决的
  • 将表单传递给 AngularJS 组件进行验证

    我正在将旧代码库迁移到 AngularJS 1 5 所推广的新组件架构 我在对较大的表单执行此操作时遇到了问题 传统上 我会附加表单验证 如下所示
  • 优化重叠矩形的绘制

    我有很多矩形 有些与其他矩形重叠 每个矩形都有一个绝对 z 顺序和一个colour 每个 矩形 实际上是粒子效果 网格或纹理的轴对齐边界框 并且可能是半透明的 但只要您不尝试剔除其他矩形后面的矩形 就更容易抽象地思考彩色矩形 所以我将在问题
  • 从字符串中提取电子邮件地址

    我有一个像这样的字符串 Francesco Renga lt email protected cdn cgi l email protection gt 我只需要提取电子邮件 即 电子邮件受保护 cdn cgi l email protec
  • 如何使用 RSpec 测试 javascript 重定向?

    我正在使用 xhr post 与控制器交互 并且我期待重定向 在 js erb 中 我有 window location href address 手动测试 浏览器会正确重定向 我如何使用 RSpec 测试它 response should
  • 将 MVC 操作结果发送到打印机

    我有一个带有操作的控制器 SomeController ActionToBePrinted ActionToBePrinted 返回一个 html 视图 当按下按钮时 从普通的 mvc razor 视图调用此操作 当按下按钮时 我将如何将视
  • 在 angularJS 中覆盖模块值/常量的最佳方法

    我用 angularJS 编写了一个模块 封装了所有后端通信 为了获得更大的灵活性 我将 api 前缀作为模块上的常量值 可能是值 因为我没有在配置阶段使用它 所以像 angular module myapp data constant a
  • 任何 JavaScript 代码都是有效的 TypeScript 代码吗?

    目前我已经开始学习TypeScript 从我研究过的文档来看TypeScript 我看到一些纯的样品JavaScript代码可以编译为TypeScript code 我的问题是 TypeScript 语言的设计方式是否使任何 JavaScr
  • React-Router v5 History.push 不触发组件

    很抱歉朋友们又问这个问题了 我找到了解决这个问题的几个方法 但他们让我很困惑 我只是想问一个优雅的方法来做到这一点 正如你通过标题所理解的 我有一个关于反应路由的问题 让我解释 我有一个按钮 其名称是Login 单击按钮后 我执行了一些逻辑
  • ES6 Promises/在满足多个 Promise 后调用函数(不能使用 Promises.all)[重复]

    这个问题在这里已经有答案了 我正在编写 Javascript 它需要这些事件按以下顺序发生 同时触发多个 API 调用 所有调用完成且响应返回后 执行一行代码 听起来很简单 但棘手的部分是我不能使用 Promises all 因为我仍然希望
  • setTimeout() 的问题

    这是我的代码 我想要它做的是写 0 等待一秒 写 1 等待一秒 写 2 等待一秒 等等 而是写 5 5 5 5 5 for i 0 i lt 5 i setTimeout document write i 1000 http jsfiddl
  • 在javascript中通过window.location传递数据

    我试图通过 window location 传递数据 数据在 del id img album 中可用 我想通过 window location 发送多个值 window location save php type deldownload
  • 用于验证网络路径的正则表达式 PHP、jQuery、JavaScript、Ruby

    尝试找出用于验证网络路径的正则表达式 即 comp xyz or comp or comp x y z storage或者所有部分都更长的东西 但希望能够传达其要点 我目前拥有的是一个简单的输入字段 用户可以通过它传递信息 事情是我不希望他
  • 来自 ajax 的 Bootstrap 表 json

    我有 ajax 和 bootstrap 表的问题 我有一个 ajax JSON 我用这个方法调用 document ready function ajax url php process php method fetchdata dataT
  • Page_ClientValidate 正在验证多次。

    我的问题是 验证摘要消息 警报 显示两次 我无法弄清楚原因 请帮忙 这是代码 function validate javascript function if typeof Page ClientValidate function var
  • 使用 document.getElementsByName() 不起作用?

    第二个警报命令的代码按预期工作 显示元素 to 的值 但第一个警报命令不起作用 它应该做同样的事情 这是为什么

随机推荐

  • MongoError:聚合期间 PlanExecutor 错误

    我在 mongodb 中有树记录 但可能还有更多 我通过来自前端的 ID 获取商店 我需要获取 20 条记录 并按 itemId 和 colorId 对它们进行分组 并获取每个商店的计数 商店数量可以是 1 2 3 10 等 这是我需要的输
  • 直接访问gitlab数据库

    我正在从 gitlab 运行 AWS AMI 我正在尝试使用 psql 直接访问 postgres 数据库 我想我可以只使用database yml中的凭据 因为rails应用程序工作正常 opt gitlab embedded bin p
  • dotnet System.Web.Caching.Cache 与 System.Runtime.Caching.MemoryCache

    我有一个类需要将数据存储在缓存中 最初我在 asp net 应用程序中使用它 所以我使用 System Web Caching Cache 现在我需要在 Windows 服务中使用它 现在 据我了解 我不应该在非 asp net 应用程序中
  • 在 Postgresql 中索引外键

    像许多 Postgres 一样n00bs我们有很多带有外键约束但未建立索引的表 在某些情况下 这不会对性能造成很大影响 但这需要进一步分析 我读过以下文章 https www cybertec postgresql com en index
  • Databricks 连接失败,方案没有文件系统:abfss

    我已经设置了数据块连接 https docs databricks com dev tools databricks connect html这样我就可以在本地进行开发并获得 Intellij 的好处 同时利用 Azure Databric
  • python 3:类“模板”(返回参数化类的函数)

    我正在尝试创建一个传递参数的函数x并返回一个新类C C应该是固定基类的子类A 仅添加一项 添加某个类属性并将其设置为 equalx 换句话说 class C A C p x x is the parameter passed to the
  • 如何从 AlarmManager 取消警报

    我遇到过同样的问题 使用 cancel 从 AlarmManager 删除警报 Android https stackoverflow com questions 14485368 delete alarm from alarmmanage
  • 大型 WCF 服务的最佳实践?

    编写包含大量操作契约和数据契约的相当大的 wcf 服务的最佳实践是什么 我如何将功能区域分成多个合同 最好为每个功能区域创建一个端点吗 有没有什么方法可以将不同部分的源分开 但仍然只对所有部分使用一项服务 我从哪里可以获得有关如何规划合同
  • 哪种 MySQL JOIN 查询效率更高?

    给定以下表结构 CREATE TABLE user uid INT 11 auto increment name VARCHAR 200 PRIMARY KEY uid CREATE TABLE user profile uid INT 1
  • 数组下标的无效类型“double [100][double]”

    define MAX 100 double velocity MAX for itr 0 itr lt velocity 0 itr itr 1 velocity itr velocity 0 1 itr distance itr rk4
  • 如何使用 StructureMap 配置文件设置命名实例?

    我在这里进行了大量的谷歌搜索和搜索 但找不到类似的问题或答案 在典型的 SM 配置中 您可以为单个 PluginType 添加多个命名实例 ForRequestedType
  • 事务管理器已禁用对远程/网络事务的支持

    我正在使用 SQL Server 和 ASP NET 我有以下功能 Using js daoFactory CreateJoinScope Using tran New Transactions TransactionScope tran
  • Spring Session Data Redis - 从 Redis 存储中获取有效会话、当前用户

    我的问题是 在分布式 Web 应用程序中 是否可以使用 Redis Store 获取有效会话RedisOperationSessionRepository 我的意思是我不想编写显式代码将其放入 Redis 存储然后稍后阅读它 我想了解框架或
  • 如何在Java中使用输出参数? [复制]

    这个问题在这里已经有答案了 有人可以给我一些在函数中使用输出参数的示例代码吗 我尝试用谷歌搜索它 但只是在函数中找到了它 我想在另一个函数中使用这个输出值 我正在开发的代码旨在在 Android 中运行 Java 按值传递 没有out类似于
  • 如何在一段时间后取消 RXJS 订阅

    如果用户的网速很慢并且订阅时间太长 超过30秒 我想取消它 const k this firebase user subscribe data gt some instructions error gt alert error gt con
  • Windbg 设置取决于调用堆栈的条件断点

    问题 我需要制作一个脚本或表达式 如果调用堆栈上的某处是具有特定名称的函数 则该脚本或表达式不会中断 具体问题 如何将调用堆栈上的函数获取到字符串列表 Example Module MyFunctionWithConditionalBrea
  • Leaflet.js:是否可以按属性过滤geoJSON特征?

    我环顾四周 看到很多有关如何显示 隐藏图层的信息 这很酷 但由于我可以向 GeoJSON 功能添加任意属性 所以我希望能够相应地过滤它们 例如 如果我的特征 1 2 和 3 具有以下属性 小 红色 甜的 大 绿色 酸的 小 红色 热的 我如
  • docker compose up 工作正常,但浏览器显示无法访问站点

    docker compose up显示这个 Recreating tutorial product service 1 Recreating tutorial product service 1 done Attaching to tuto
  • ant中设置类路径的问题

    我在运行 Java 程序时遇到问题 它使用一些第三方 JAR 我可以很好地编译它 但是当我在 ant 中调用我的运行目标时 它说它找不到我告诉它在类路径中运行的类 我的 build xml 如下所示
  • 为什么解构赋值不知道空值是假值并使用默认值? [复制]

    这个问题在这里已经有答案了 假设我们有一个函数使用参数内部对象中的一些键 const api data name gt My name is name 如果我们通过 data data 0 data NaN or data undefine