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

Vue计算属性获取数组最后一个对象属性报undefined错误如何解决

报错原因

初始加载时products是长度为0的空数组,此时计算属性中this.products.length - 1计算结果为-1,this.products[-1]的取值为undefined,直接访问undefined上的productKey属性就会触发该报错。只要出现数组长度为0的场景(比如初始加载、手动清空产品列表后),这段代码都会报错。

修复方案
  • 给计算属性增加空值兜底逻辑,数组为空时返回默认值,避免访问不存在的元素属性。两种常用写法如下:
// 写法1:基础判断写法,兼容性更好
lastKey() {
  if (this.products.length === 0) return ''
  return this.products[this.products.length - 1].productKey
}
// 写法2:用ES新特性简化代码
lastKey() {
  // at(-1)直接取数组最后一位,可选链?.避免访问undefined属性,??设置空值默认值
  return this.products.at(-1)?.productKey ?? ''
}
  • 如果你的需求是每次新增产品后,立刻把最新的productKey存入Vuex,不需要依赖计算属性取值,直接在addNewProduct方法内push完成后操作即可,还能避免计算属性更新的时序问题:
addNewProduct() {
  const newProduct = {
    productKey: '',
    productName: ''
  }
  this.products.push(newProduct)
  // 直接操作刚创建的新产品对象即可
  this.$store.commit('updateLastKey', newProduct.productKey)
}
  • 额外排查点:检查代码中是否存在主动重置products为空数组、批量删除数组元素导致数组长度为0的逻辑,上述兜底逻辑在这些场景下也能正常运行,不会抛出报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:33:43