簡體   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