控制台显示未捕获的类型错误

Posted

技术标签:

【中文标题】控制台显示未捕获的类型错误【英文标题】:Console Display Uncaught TypeError 【发布时间】:2021-07-04 00:54:26 【问题描述】:

未捕获的类型错误:无法读取未定义的属性“6” 在 XMLHttpRequest.xhttp.onreadystatechange (main.js:36) 在 htmlDivElement。

我正在开发一个学习和练习 javascript 的小游戏,我想获取存储在 json 文件中的信息,以从我显然使用的对象数组的属性中获取信息:arrayOfObjects[index].propertyOfObject,在我的代码中是 firstNShape.innerHTML = firstShape[randomFirstShape]; 它工作正常但我收到错误:

未捕获的类型错误:无法读取未定义的属性“6” XMLHttpRequest.xhttp.onreadystatechange (main.js:36) 在 HTMLDivElement。

在浏览器的控制台中,我知道错误是什么意思,但我不明白为什么控制台显示“无法读取属性 '6'”,而 6 它是索引,而不是属性,属性是名称, 我是不是做错了什么?

这是我的代码:

const xhttp = new XMLHttpRequest();

xhttp.onreadystatechange = function () 
    if (this.readyState == 4 && this.status == 200) 
      var cardsInfo = JSON.parse(xhttp.responseText);
    

    for (let i = 0; i < 2; i++) 
      //Choose a random value for card
      let randomFirstValue = Math.floor(Math.random() * 13);
      let randomFirstShape = Math.floor(Math.random() * 4);
      let firstShape = ["♥", "♦", "♣", "♠"];

      //create the card
      let firstCard = document.createElement("div");
      firstCard.classList.add("card");
      firstCard.classList.add("cardDisplay");

      //Add value to the card
      let firstNValue = document.createElement("p");
      firstNValue.innerHTML = cardsInfo[randomFirstValue].name;
      firstCard.appendChild(firstNValue);

      //Add shape to the card
      let firstNShape = document.createElement("p");
      firstNShape.innerHTML = firstShape[randomFirstShape];
      firstCard.appendChild(firstNShape);
      //Append card to the card container
      cardContainer.appendChild(firstCard);
    

这是我的 JSON 文件,它很简单,但我只是为了学习和练习 JSON 和 JS。

[
  
    "name": "A",
    "value": 1,
    "value2": 11
  ,
  
    "name": "2",
    "value": 2
  ,
  
    "name": "3",
    "value": 3
  ,
  
    "name": "4",
    "value": 4
  ,
  
    "name": "5",
    "value": 5
  ,
  
    "name": "6",
    "value": 6
  ,
  
    "name": "7",
    "value": 7
  ,
  
    "name": "8",
    "value": 8
  ,
  
    "name": "9",
    "value": 9
  ,
  
    "name": "10",
    "value": 10
  ,
  
    "name": "J",
    "value": 10
  ,
  
    "name": "Q",
    "value": 10
  ,
  
    "name": "K",
    "value": 10
  
]

【问题讨论】:

你能分享一下你的响应 JSON 是什么样子的吗? @Jazz 当然,我要编辑我的问题 嗯,我可以看到一些可能导致您的问题的事情。首先,您需要该 if 块中的所有逻辑。即使未设置该变量,您仍在继续。这就是为什么它显示未定义的原因 效果很好!我之前尝试过,但我不知道为什么它不起作用,但无论如何,显然我做错了什么。谢谢@爵士乐!! 【参考方案1】:

我在 Jazz 的帮助下解决了,我所做的只是将所有逻辑放在 if 语句中,因为如果它在外面,即使条件没有完成它也会运行,我知道很简单但我是新手.

【讨论】:

以上是关于控制台显示未捕获的类型错误的主要内容,如果未能解决你的问题,请参考以下文章

jquery-ui 显示未捕获的类型错误

未捕获(承诺)类型错误:尝试打开窗口时出现问题

未捕获的类型错误:无法设置未定义的属性“nTf”

未捕获的类型错误:无法重新定义属性:ytplayer

Javascript Handsontable - 未捕获的类型错误:无法读取未定义的属性“insertBefore”

未捕获的类型错误:无法读取 null 的属性“长度”(maps.js 第 85 和 541 行)