JavaScript实现禁言命令时长度判断分支逻辑异常问题求助
问题原因
你代码中的长度判断语句用错了运算符:=是赋值运算符,不是相等比较运算符。
- 当执行
if(args[0].length = 3)时,代码会直接把args[0].length赋值为3,赋值运算的返回值就是被赋值的3,转换为布尔值为true,所以这个判断永远成立,自然永远走长度为3的分支,不会触发后续的else if判断。
修复方案
把所有判断语句里的=替换为严格相等运算符===即可,修改后的代码如下:
if(args[0].length >= 4) { return msg.reply("Please use abbreviated time formats! **m**, **h**, **d**, **w**") } var data = args[0] if(args[0].length === 3) { data = data.substr(0, 2) + " " + data.substr(2, 3); msg.channel.send(data); } else if(data.length === 2) { data = data.substr(0, 1) + " " + data.substr(1, 2); msg.channel.send(data); msg.channel.send("test") }
额外优化建议
- 建议补充长度为1的异常输入处理分支,避免出现输入非法时无响应的问题
substr方法第二个参数是截取长度,你在长度为3的字符串里调用substr(2,3)和直接调用substr(2)效果完全一致,可以简化写法
内容的提问来源于stack exchange,提问作者Not_A_Dev
相关产品推荐
相关产品推荐

