我想知道为什么这段代码不起作用,它根本不通知任何输入if并直接进入else
let user = message.mentions.users.first() || message.author;
if(user.presence.activities !== null && user.presence.activities.type === 2 && user.presence.activities.name === 'Spotify' && user.presence.activities.assets !== null) {
let trackIMG = `https://i.scdn.co/image/${user.presence.game.assets.largeImage.slice(8)}`;
let trackURL = `https://open.spotify.com/track/${user.presence.game.syncID}`;
let trackName = user.presence.activities.details;
let trackAuthor = user.presence.activities.state;
let trackAlbum = user.presence.activities.assets.largeText;
const embed = new MessageEmbed()
.setAuthor('Spotify Track Info', 'https://cdn.discordapp.com/emojis/653135129870336031.png?v=1')
.setColor("GREEN")
.setThumbnail(trackIMG)
.addField('Song Name', trackName, true)
.addField('Album', trackAlbum, true)
.addField('Author', trackAuthor, false)
.addField('Listen to Track', `${trackURL}`, false)
.setFooter(message.member.displayName, message.author.displayAvatarURL())
.setTimestamp()
message.channel.send(embed);
} else {
message.channel.send('**Este usuário não está ouvindo o Spotify!**');
}
}
答案 0 :(得分:0)
常见陷阱。
您应该记住的一件事是,您所引用的变量有可能总是不为null。它可能是未定义的,'':空字符串,[]:空数组等。
null:通常由用户设置此类型。
未定义:经验法则是,只要您手动设置,就永远不要将其设置为undefined但为null。类型“未定义”通常由应用程序/系统设置。因此,如果您手动设置未定义,则可能不知道它是由系统设置还是由用户设置。
// not recommended..
test = undefined;
// recommended..
test = null;
现在,要问您的问题,请确保它是您指的类型。
user.presence.activities.assets和user.presence.activities的类型均为null且未定义,例如”,[]等。
验证为布尔值
!!user.presence.activities.assets
这将验证
user.presence.activities.assets !== null
user.presence.activities.assets !== undefined
user.presence.activities.assets !== ''
如果是数组,请使用JSON.stringify进行验证。
JSON.stringify(user.presence.activities.assets) !== '[]'
如果它是一个空对象,请使用相同的对象进行验证。
JSON.stringify(user.presence.activities.assets) !== '{}'
也就是说,首先控制台值并编写相关事件条件。例如:
const { presence: { activities } } = user;
if(!!activities && activities.type === 2 &&
activities.name === 'Spotify' && !!activities.assets) {
// code..
}