[英]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.