Javascript 如何修复未定义的无法就绪属性

Javascript 如何修复未定义的无法就绪属性,javascript,node.js,discord.js,Javascript,Node.js,Discord.js,所以,我一直在编写一个discord bot,当我试图检查“mrole”是否具有属性“app”时,出现了这个错误。我不知道这为什么不起作用 我想让它读取团队id,这样我就可以像这样整理json文件: let barney = message.guild.roles.find(r => r.name === "Barney") let deadpool = message.guild.roles.find(r => r.name === "Deadpool")

所以,我一直在编写一个discord bot,当我试图检查“mrole”是否具有属性“app”时,出现了这个错误。我不知道这为什么不起作用

我想让它读取团队id,这样我就可以像这样整理json文件:

      let barney = message.guild.roles.find(r => r.name === "Barney")
      let deadpool = message.guild.roles.find(r => r.name === "Deadpool")
      let hulk = message.guild.roles.find(r => r.name === "Hulk")
      let mario = message.guild.roles.find(r => r.name === "Mario")
      let spiderman = message.guild.roles.find(r => r.name === "Spider-Man")
      let umbreon = message.guild.roles.find(r => r.name === "Umbreon")
      let app = message.guild.member(message.mentions.users.first());
      let app2 = message.mentions.users.first().username
      var mrole
      if (app.roles.has(barney.id)){
        mrole = barney.id
      }
      else if (app.roles.has(deadpool.id)){
        mrole = deadpool.id
      }
      else if (app.roles.has(hulk.id)){
        mrole = hulk.id
      }
      else if (app.roles.has(mario.id)){
        mrole = mario.id
      }
      else if (app.roles.has(spiderman.id)){
        mrole = spiderman.id
      }
      else if (app.roles.has(umbreon.id)){
        mrole = umbreon.id
      }
      if(mrole = barney.id || deadpool.id || hulk.id || mario.id || spiderman.id || umbreon.id){
          if (client.memberspoints.mrole[app.id].name != app2){
          client.memberspoints [mrole] = {
            [app2.id]: {
              name: `${app2}`, 
              mpoints: `${+args[1]}`
            }  
          }
          message.channel.send(`${app} agora tem ${+args[1]} pontos`);
          }
            else{
              let _mpoints = client.memberspoints.mrole[app.id].mpoints
              var smpoints = +_mpoints + +args[1]
              client.memberspoints [mrole] = {
                [app.id]:{
                  name: `${app2}`,
                  mpoints: `${smpoints}`
                }
              }
              message.channel.send(`${app} agora tem ${smpoints} pontos`);
            }
            fs.writeFile ('./memberspoints.json', JSON.stringify (client.memberspoints, null, 2), err => {
            if (err) throw err;
            console.log('Salvo');
            });
下面是我得到的错误:
if(client.memberspoints.mrole[app.id].name!=app2){
^
TypeError:无法读取未定义的属性“app.id”


我基本上想让它检查“mrole”上是否已经有人的名字,所以我可以按团队和名字进行分类。有什么想法吗?

要检查对象是否具有特定属性,应该使用
对象。hasOwnProperty
方法:

hasOwnProperty()方法返回一个布尔值,指示对象是否将指定的属性作为自己的属性(而不是继承它)

所以,它会是这样的:

if(mrole.hasOwnProperty('app'){//do stuff}

我最近了解到这可能是一个安全问题,所以最好这样使用:
if(Object.prototype.hasOwnProperty.call(mrole,'app')
(您可以阅读更多)

现在,问题可能完全是另一回事——我注意到这一点
如果(mrole=barney.id | deadpool.id | hulk.id | mario.id | | spiderman.id | umbreon.id)
,则分配给mrole,而不是比较!如果(mrole==…

那么,你说有一个错误。它在哪里?你没有给我们任何解释代码或错误在哪里的信息。它不可复制,因为我们没有环境,因为你有自定义角色等。添加了它。这是我的错,对不起。
应用程序
似乎是一个对象。那么,它的目的是什么
mrole[app]
mrole
未定义请删除您的代码。控制台记录app.id以确保它与您所说的一样。然后查看mrole,并查看其属性。mrole听起来像一个对象,因此
app.id
需要是该对象中的一个键。如果没有,它会抛出。您需要抓住这种可能性,因为我看不到任何可能性在你的代码片段中有一种对象验证。我还注意到你没有else语句。它可能是未定义的吗?但问题是
mrole
是未定义的,而不是它没有该属性…,所以调用
hasOwnProperty()
上面会抛出一个错误,比如:
无法读取未定义的属性'hasOwnProperty',最好使用
typeof variable=='undefined'
@FlashThunder是的,尽管他第一个问到的问题是“如何检查对象是否具有特定属性”,所以我回答:)是的,现在我再看一看代码,这里有很多错误:
如果
语句是错误的,mrole是未定义的,在
如果
语句中有赋值。。。