无法读取未定义的 属性 'includes'
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')
}
}
})
我认为这段代码可以解决这个问题。
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')
}
}
})
这是因为嵌入数组项中至少有一项缺少 title
属性。
您需要将 if 语句更新为:
If (message.embeds[i] &&
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!")) {
/* ... */
}
表示在message.embeds[i]
里面至少有一个元素没有标题属性。
首先检查message.embeds[i].title
是否存在,检查完成后再进行其他操作
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')
}
}
})
我是 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')
}
}
})
我认为这段代码可以解决这个问题。
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')
}
}
})
这是因为嵌入数组项中至少有一项缺少 title
属性。
您需要将 if 语句更新为:
If (message.embeds[i] &&
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!")) {
/* ... */
}
表示在message.embeds[i]
里面至少有一个元素没有标题属性。
首先检查message.embeds[i].title
是否存在,检查完成后再进行其他操作
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')
}
}
})