javascript - 你好我想知道为什么这段代码不起作用
问题描述
我想知道为什么这段代码不起作用它只是没有通知任何东西进入 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!**');
}
}
解决方案
常见的陷阱。
您应该记住的一件事是,您所指的变量可能并不总是为空;它可能是未定义的,'':空字符串,[]:空数组等。
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..
}
推荐阅读
- ruby-on-rails - Ruby on Rails 更新数据库字段迁移
- python - 替换张量中大于零的所有值
- javascript - Javascript替换具有属性的span标签内的值
- ios - 为什么 NSMutableDictionary setValue 崩溃?
- gradle - 如何自定义 Cordapp 示例
- php - SQL Pivot Query 中的 PHP 数组显示不同的数据
- c# - 对其他进程进行强制收集和压缩有用的情况
- google-analytics - 如何在谷歌分析推荐部分显示名称?
- javascript - 如何将对象的对象数组转换为一维数组?
- python - 从 imblearn.combine 导入 SMOTEENN 时,ImportError 是:“无法导入名称 get_max_squared_sum”