首页 > 解决方案 > 你好我想知道为什么这段代码不起作用

问题描述

我想知道为什么这段代码不起作用它只是没有通知任何东西进入 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!**');
  }
}

标签: javascriptdiscord.js

解决方案


常见的陷阱

您应该记住的一件事是,您所指的变量可能并不总是为空;它可能是未定义的,'':空字符串,[]:空数组等。

null:此类型通常由用户设置。

未定义:经验法则是,无论何时手动设置,都不要将其设置为未定义但为空。类型“未定义”通常由应用程序/系统设置。所以如果你手动设置undefined,你可能不知道是系统设置还是用户设置。

// not recommended..
test = undefined;

// recommended..
test = null;

现在,来回答您的问题,请确保它属于 youré 所指的类型。

user.presence.activities.assets 和 user.presence.activities 的类型均为 null 而不是 undefined、''、[] 等。

验证为布尔值:

!!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..
}

推荐阅读