You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带默认值的对象解构:values返回原生函数而非undefined问题咨询

解构赋值中数组与对象的values取值差异解析

先拆解你遇到的问题核心:
当response.data是数组时,解构出来的values是原生函数,这是因为数组的原型链上自带values方法,而你当前的解构逻辑并没有跳过原型链的查找。

具体分析两段代码

第一段代码(data为数组)

const response = { data: [] }
const { data: { values } = {} } = response

解构逻辑是:

  1. 从response中取出data,此时data是一个数组(存在且不为null/undefined),所以不会使用后面的默认值{}。
  2. 接着从这个数组中读取values属性——数组的原型Array.prototype上自带values()迭代器函数,所以这里取到的是这个原生函数,而非undefined。

第二段代码(data为空对象)

const response = { data: {} }
const { data: { values } = {} } = response

解构逻辑是:

  1. 同样先取出data(空对象,存在),不触发默认值。
  2. 从空对象读取values属性——普通对象的原型Object.prototype上没有values实例方法(Object.values()是全局工具方法,不是实例属性),所以找不到对应属性,结果为undefined,符合你的预期。

解决方法

如果希望无论data是数组还是空对象,取不到values时都返回undefined,可以给values本身设置默认值:

const response = { data: [] }
const { data: { values = undefined } = {} } = response

这样当data上没有自身的values属性时(数组的values来自原型,不属于自身属性),就会使用默认值undefined。

或者更严谨地只取data自身的values属性:

const response = { data: [] }
const { data } = response
const values = data.hasOwnProperty('values') ? data.values : undefined

内容的提问来源于stack exchange,提问作者Richard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 04:23:20