[英]Json TypeError: Cannot read properties of undefined (reading 'name')
我有一個錯誤,它說
TypeError:無法讀取未定義的屬性(讀取“名稱”)
我正在使用 NodeJS 和 Discord.js 制作一個 Discord 機器人,並且我有一個空 JSON,每當我鍵入命令時我都會在其中添加一個項目,但我無法在第二個我不知道的情況下獲取該新項目的值為什么
{
"Scammere" : [
]
}
module.exports = {
name: 'addscammer',
description: "this is a ping command",
execute(message, args, Discord){
if(!args[0]) { return message.reply("Du skal skrive personens ingame navn"); }
if(message.member.roles.cache.has('850790004275019796') || message.member.roles.cache.has('850790306915942400')){
const jsonData= require('./test.json');
var playerIsNew = true;
for (let index = 0; index < jsonData.Scammere.length; index++) {
const element = jsonData.Scammere[index];
if(element.name.toUpperCase() == args[0].toString().toUpperCase()){
playerIsNew = false;
console.log("Person Findes Allerde");
}
}
var LocalStorage = require('node-localstorage').LocalStorage,
localStorage = new LocalStorage('./scratch');
index = 0;
for (let i = 0; i < jsonData.Scammere.length; i++) {
const element = jsonData.Scammere[i].name.toString();
if(element.toString().toUpperCase() == args[0].toUpperCase()){
index = i;
console.log(element + "is using" + i);
}else{
index = jsonData.Scammere.length + 1;
}
}
console.log(index);
if(jsonData.Scammere.at(index) != null){
console.log("Test");
playerIsNew = false;
}
if(playerIsNew){
var myObj = {
"name" : args[0],
"timesScamed" : 1,
"timesTrusted" : 0
};
jsonData.Scammere.push(myObj);
}else{
jsonData.Scammere.at(index).timesScamed = parseInt(localStorage.getItem("storedScams " + jsonData.Scammere.at(index).timesScamed));
jsonData.Scammere[index].timesScamed += 1;
}
console.log(jsonData.Scammere);
setTimeout(() => {
var hexColor = "#000";
var status = "scammer";
if(!playerIsNew){
if(jsonData.Scammere[index].timesScamed > jsonData.Scammere[index].timesTrusted){
hexColor = "#ff0000";
status = "Scammer"
}else{
hexColor = "#43eb34";
status = "Trusted";
}
}else{
hexColor = "#c4c4c4";
status = "Måske";
}
const Test = new Discord.MessageEmbed().setColor(hexColor).setTitle("Data om: " + jsonData.Scammere[index].name.toString())
.setAuthor({ name: jsonData.Scammere[index].name.toString(), iconURL: 'https://minotar.net/avatar/' + jsonData.Scammere.at(index).name.toString() + '/128.png', url: 'https://discord.js.org' })
.setThumbnail('https://mc-heads.net/body/' + jsonData.Scammere.at(index).name.toString() + '/128.png')
.addFields(
{ name: 'Status', value: status },
{ name: 'Scammet', value: jsonData.Scammere.at(index).timesScamed.toString() },
{ name: 'Trusted', value: jsonData.Scammere.at(index).timesTrusted.toString() }
);
message.channel.send({ embeds: [Test] });
}, 500);
}
}
}
你的 JSON
{
"Scammere" : [
]
}
是一個對象,它有一個名為Scammere
的成員,它是一個空數組。
您的
for (let index = 0; index < jsonData.Scammere.length; index++) {
loop 永遠不會輸入其內容,因為jsonData.Scammere
為空,這意味着它的length
為 0 並且 (0 < 0) 為false
。
然而,你的線
const Test = new Discord.MessageEmbed().setColor(hexColor).setTitle("Data om: " + jsonData.Scammere[index].name.toString())
期望jsonData.Scammere[index]
是一個具有name
字段的對象,但是由於jsonData.Scammere[index]
不存在,它被評估為null
並且基本上它結果等同於null.name
,它會拋出你的錯誤。
如果有一個項目你不確定它是否存在,那么首先檢查它是否存在並且只有當它確實引用了它的成員/函數時。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.