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

JavaScript数组push自定义实例后读取值为undefined问题排查

问题根源及修复方案

错误1:构造函数无返回值

TarotCard作为构造函数调用时,默认返回实例对象this,你代码中仅在函数内部创建了未绑定到实例也未手动返回的card数组,最终new TarotCard()返回的是空对象,自然无法通过数组下标读取属性。

错误2:变量未声明导致全局污染

代码中card、deck、i均未使用let/const声明,默认挂载到全局对象,会出现变量覆盖问题。

错误3:DeckSize类型错误

你定义的DeckSize是字符串"78",此处应使用数字类型。


修复后代码

// 改为数字类型
const DeckSize = 78;

function TarotCard(cardNumber, isInverse){
  // 手动返回构造好的数组,也可直接简写为return [cardNumber, isInverse]
  const card = [cardNumber, isInverse];
  console.log("new card="+card[0]+" "+card[1]);
  return card;
}

function TarotDeck(){
  const deck = [];
  // 循环变量用let声明
  for(let i=0; i<DeckSize; i++){
    deck.push(new TarotCard(i, false));
    console.log("pushed new card as "+deck[i][0]+" and "+deck[i][1]);
  }
  console.log(deck.length);
  return shuffleDeck(deck, 3);
}

如果你希望TarotCard返回实例对象而非数组,也可以改成以下写法,读取属性时用.cardNumber和.isInverse即可:

function TarotCard(cardNumber, isInverse){
  this.cardNumber = cardNumber;
  this.isInverse = isInverse;
  console.log("new card="+this.cardNumber+" "+this.isInverse);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:15:08