JavaScript中触发if条件时else分支也同时打印是什么原因?
代码问题分析
你的代码的核心问题是将「逐次遍历的单元素匹配判断」和「全局存在性判断」的逻辑混淆了,同时没有在匹配成功后终止遍历流程:
- 循环会遍历整个rainbow数组的7个元素,每遍历1个元素就会执行1次if-else判断
- 假设你输入的是red,只有遍历第1个元素时会匹配成功走if分支打印yes,剩余6次遍历都会匹配失败走else分支打印拼接后的彩虹色字符串,所以你会同时看到if和else的输出内容
修复方案
方案1:直接使用数组内置方法判断(最简洁)
用Array.includes()可以直接判断目标值是否存在于数组中,不需要手动写遍历逻辑:
const rainbow = ['red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'violet']; let colour = prompt("What is your favourite colour?").toLowerCase(); if (rainbow.includes(colour)) { console.log("yes") } else { console.log(rainbow.join(" *** ")); }
方案2:保留循环实现,调整判断逻辑
如果需要手动实现遍历判断,可以新增标记位记录匹配结果,匹配成功后提前终止循环,遍历结束后再统一走分支逻辑:
const rainbow = ['red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'violet']; let colour = prompt("What is your favourite colour?").toLowerCase(); let hasMatch = false; for (let i = 0; i < rainbow.length; i++) { if (rainbow[i] === colour) { hasMatch = true; break; // 匹配到目标后直接终止循环,避免多余遍历 } } if (hasMatch) { console.log("yes") } else { console.log(rainbow.join(" *** ")); }
内容的提问来源于stack exchange,提问作者Melody Chen
相关产品推荐
相关产品推荐

