为什么我的对象值定义不起作用?(返回未定义)

Why are my object value definitions not working? (returning undefined)

提问人:secnyt 提问时间:5/25/2020 最后编辑:Philsecnyt 更新时间:5/25/2020 访问量:36

问:

所以我正在使用 discord.js 创建一个 Discord 机器人(并不是说这与问题有任何关系,尽管它可能有助于理解)。

我有一个处理传入命令的函数。handle

var sgs = {};
var handle = function(msg){
    var gid = msg.guild.id; // msg.guild.id is a string 

    console.log(gid); // works as expected

    sgs[gid] = "plz omg"; 
    console.log(sgs[gid]); // returns undefined

    sgs.plz = "hi";
    console.log(sgs.plz); // returns undefined

    if(sgs[gid] == undefined){
        sgs[gid] = "sadness";
        console.log(sgs[gid]); // returns undefined
    }
    console.log(sgs); // returns an empty object
} 

我试过用代替,但无济于事。我不太确定这里发生了什么。sgs.gidsgs[gid]

(另外,如果我的措辞、格式或问这个问题的方式有任何问题,请告诉我,这就像我在这里的第二个问题。

JavaScript 对象 undefined-reference

评论

2赞 Phil 5/25/2020
你缺少一些东西,因为当一切都像你所说的那样时,它会按预期工作~jsfiddle.net/Lhk5wnxt
0赞 ray 5/25/2020
由于在处理程序外部声明和可访问,因此在执行之前,可能还有其他东西正在重置它。 不一定同步运行。sgsconsole.logconsole.log
0赞 secnyt 5/25/2020
@Phil,哦,你是对的。我遗漏的一件事是(因为我没有意识到它是相关的)是我有一个将值设置为空对象的 which 是什么,尽管我不确定为什么它不允许我为它设置值(因为它仍然返回一个空对象,即使在 fs.readFile() 之后)。fs.readFile()sgs
0赞 secnyt 5/25/2020
@rat哈特菲尔德哦,是的,你是对的!正如我之前的评论一样,异步运行,这意味着它会在所有声明后被重置。我会改用。谢谢。fs.readFile()fs.readFileSync()
0赞 Phil 5/25/2020
fs.readFile是异步的,因此如果您向它传递回调函数,该函数将在稍后执行。尝试fs.readFileSync

答: 暂无答案