You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么if (msg.content == "Ash" || "ash")无论输入什么都会返回true?

问题根本原因

这个问题是JavaScript逻辑运算符的基础规则导致的语法逻辑错误,和Discord.js库本身无关。

条件判断的执行逻辑拆解

你写的if (msg.content == "Ash" || "ash") 会按照以下顺序执行:

  1. 由于相等运算符==优先级高于逻辑或||,首先计算msg.content == "Ash",得到布尔值true或false
  2. 再将第一步的结果和"ash"做逻辑或||运算,最终结果作为if判断的条件

逻辑或||的运算规则

JavaScript中逻辑或||会返回第一个为真值的操作数,如果所有操作数都是假值才会返回最后一个操作数。
而非空字符串"ash"本身属于标准真值,因此不管第一步的相等判断结果是什么,整个表达式的结果永远为真值:

  • 当msg.content == "Ash"为true时:true || "ash" 返回true,条件成立
  • 当msg.content == "Ash"为false时:false || "ash" 返回"ash",非空字符串在if判断中会被认定为true,条件依然成立

正确写法参考

如果需要同时匹配大小写的"Ash",可以选择以下两种写法:

  • 完整写两个相等判断:
if (msg.content == "Ash" || msg.content == "ash") {
  msg.reply("sample text");
}
  • 更简洁的忽略大小写写法(可匹配所有大小写组合,如ASH、aSh等):
if (msg.content.toLowerCase() == "ash") {
  msg.reply("sample text");
}

你提到的「删除||运算符规避了问题」本质是把判断条件简化为仅匹配"Ash",如果不需要兼容小写输入的话也可以正常使用。

内容的提问来源于stack exchange,提问作者Autumn Rain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:15:03