繁体   English   中英

Json TypeError:无法读取未定义的属性(读取“名称”)

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM