簡體   English   中英

無法讀取未定義的屬性“包含”

[英]Cannot read property 'includes' of undefined

我是 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')
    }
  }
})

這是因為 embeds 數組項中至少有一項缺少title屬性。

您需要將 if 語句更新為:

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

我認為這段代碼可以解決這個問題。


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')
    }
  }
})

這意味着在message.embeds[i]中至少有一個元素沒有 title 屬性。

您應該先檢查message.embeds[i].title存在,檢查后執行其他操作。

您可以像這樣編寫更具防御性的代碼。 代替

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

你可以寫如下

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

可能某些embed對象沒有title屬性。

您可以安全地使用邏輯將 if 條件更改為:

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

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')
      }
    }

  }
});

它的空指針錯誤。 你的一些對象參數為空,但它映射在 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')
    }
  }
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM