无法读取未定义的属性“包含”

时间:2019-03-05 12:34:02

标签: javascript node.js discord.js

我是JavaScript的新手,是否正在尝试剖析嵌入式消息。这是我的代码,它可以正常运行几分钟,可以正常运行,但请问出什么地方出错了。

bot.on('message', (message) => {
  for (var i = 0; i < message.embeds.length; i++) {
    if (message.embeds[i].title.includes("text!")) {
      message.channel.send('reply')
    }
  }
})

7 个答案:

答案 0 :(得分:2)

这是因为embeds数组项中至少有一项缺少title属性。

您需要将if语句更新为:

If (message.embeds[i] &&
 message.embeds[i].title && ...)

答案 1 :(得分:1)

这意味着message.embeds[i]中至少有一个没有标题属性的元素。

您应该首先检查message.embeds[i].title是否存在,并在检查之后执行其他操作。

答案 2 :(得分:0)

我认为这段代码可以解决此问题。


bot.on('message', (message) => {
  for (var i = 0; i < message.embeds.length; i++) {
    if (message.embeds[i] && message.embeds[i].title.includes("text!")) {
      message.channel.send('reply')
    }
  }
})

答案 3 :(得分:0)

您可以像这样编写更具防御性的代码。代替

if(message.embeds[i].title.includes("text!"))

您可以编写以下内容

if(typeof message.embeds[i].title === "string" &&
message.embeds[i].title.includes("text!"))

答案 4 :(得分:0)

某些embed对象可能没有title属性。

您可以放心使用逻辑将if条件更改为:

if ('title' in message.embeds[i] && message.embeds[i].title.includes("text!")) {
   /* ... */
}

答案 5 :(得分:0)

JavaScript不是类型安全的语言,并且错误是由于类型安全引起的。我们将必须检查对象是否存在以及嵌套属性是否存在,之后我们应该能够检查该值。就您而言:


bot.on('message', (message) => {

  // check if main obj and main property exist
  if (message && message.embeds) {

    for (var i = 0; i < message.embeds.length; i++) {
      // now, check if title exists and after check the text inside
      if (
        message.embeds[i].title && 
        message.embeds[i].title.includes("text!")) 
      {
        message.channel.send('reply')
      }
    }

  }
});

答案 6 :(得分:0)

它的空指针错误。你的一些对象参数为空,但它映射在 html 中。请尝试添加更多空检查以避免这种情况。

在访问一个项目之前总是检查它

bot.on('message', (message) => {
  for (var i = 0; i < message.embeds.length; i++) {
    if (message.embeds[i].title && message.embeds[i].title.includes("text!")) {
      message.channel.send('reply')
    }
  }
})