这段代码存在什么问题?为何始终输出第一个代码块内容?
代码问题分析
核心问题:字符串与布尔值类型混淆
你写的代码里,const fireIsHot = "true";是把字符串类型的"true"赋值给变量,而非布尔类型的true。
在JavaScript的if条件判断逻辑里,会依据「真值(truthy)/假值(falsy)」规则判定:
- 所有非空字符串(哪怕是"false")都会被判定为真值
- 只有空字符串
""、布尔值false、null、undefined、0、NaN这类值才属于假值
这就导致不管你把变量设为"true"还是"false",只要是非空字符串,if(fireIsHot)的条件都会成立,只会执行第一个console.log代码块。
为什么设为"false"仍走第一个分支
当你把变量值改成"false"时,它依然是一个非空字符串,属于JavaScript认定的真值范畴,if条件自然还是为真,所以还是会打印"Fire is hot!"。
修复方案
方案1:直接使用布尔类型值
把字符串形式的"true"/"false"替换成布尔类型的true/false:
const fireIsHot = true; if (fireIsHot) { console.log("Fire is hot!"); } else { console.log("Fire is not hot!"); }
方案2:判断字符串内容(适配必须用字符串的场景)
如果业务逻辑要求变量必须是字符串类型,可以直接判断字符串内容:
const fireIsHot = "true"; if (fireIsHot === "true") { console.log("Fire is hot!"); } else { console.log("Fire is not hot!"); }
内容的提问来源于stack exchange,提问作者Mr Pain
相关产品推荐
相关产品推荐

