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

JavaScript新手求助:向数组添加商品名称时报错Uncaught TypeError

解决"Cannot read property 'push' of undefined"错误

嗨,刚接触JavaScript遇到这种问题太正常了,咱们一步步拆解来解决:

错误根源

你看到的Uncaught TypeError: Cannot read property 'push' of undefined,核心问题是你调用push方法的那个变量是undefined——也就是代码里的this.finalOrder根本找不到对应的变量。

为什么会这样?

  • 你在全局声明了var finalOrder = new Array();,这个变量确实存在于全局作用域,但当通过onclick触发addToCart函数时,函数内部的this默认指向的是触发点击的那个<a>标签元素,而不是全局对象(浏览器里的window)。所以this.finalOrder相当于在a标签上找finalOrder属性,自然找不到,就变成undefined了。
  • 另外你代码里写的this.finalO...看起来像是变量名没写完,拼写错误也会直接导致变量undefined。

修复方案

这里给你几个简单可行的修复方式:

方案1:直接使用全局变量(最直观)

去掉函数里的this,直接引用你声明的finalOrder变量:

var finalOrder = new Array(); 
function addToCart(name){
  finalOrder.push(name); // 直接用全局变量,不用this
  // 可以加个日志确认是否添加成功
  console.log("当前购物车:", finalOrder);
}

方案2:用现代JS写法声明数组(更推荐)

现在JS里创建数组更常用[],而且用let替代var可以避免一些全局变量的坑:

let finalOrder = []; // 简洁的数组创建方式
function addToCart(name){
  finalOrder.push(name);
}

方案3:明确指定全局对象(如果一定要用this)

如果你坚持要用this,可以直接用window.finalOrder来指向全局变量:

var finalOrder = new Array(); 
function addToCart(name){
  window.finalOrder.push(name); // 明确指向window上的全局变量
}

额外调试小技巧

下次遇到类似变量undefined的问题,可以在函数开头加个console.log(finalOrder),看看变量到底是什么值,快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:04:24