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