Cannot read property 'includes' of undefined

前端 未结 6 1308
抹茶落季
抹茶落季 2021-01-21 16:09

I am new to JavaScript, am I was trying to dissect an embedded message. Here\'s my code, it runs fine for a few mins, works accordingly but idk what goes wrong.



        
相关标签:
6条回答
  • 2021-01-21 16:14

    You can write your code more defensive like this. Instead of

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

    you can write the following

    if(typeof message.embeds[i].title === "string" &&
    message.embeds[i].title.includes("text!"))
    
    0 讨论(0)
  • 2021-01-21 16:15

    Its because there is at least one item inside the embeds array items that missing the title property.

    You will need to update the if statement to be:

    If (message.embeds[i] &&
     message.embeds[i].title && ...)
    
    0 讨论(0)
  • 2021-01-21 16:24

    JavaScript is not a type safe language, and the error is caused by not being type safe. We will have to check if object exists and nested properties exists and after we should be able check the value. In your case:

    
    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')
          }
        }
    
      }
    });
    
    
    0 讨论(0)
  • 2021-01-21 16:26

    It means inside message.embeds[i] there is at least one element without title property.

    You should check first if message.embeds[i].title exists and perform other operations after the check.

    0 讨论(0)
  • 2021-01-21 16:33

    Probably some of the embed object is coming without the title property.

    You can safely use your logic changing your if condition to:

    if ('title' in message.embeds[i] && message.embeds[i].title.includes("text!")) {
       /* ... */
    }
    
    0 讨论(0)
  • 2021-01-21 16:37

    I think this code can fix this problem.

    
    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')
        }
      }
    })
    
    
    0 讨论(0)
提交回复
热议问题