`(i === true)`与`(i)`在条件判断中是否存在区别?
if(i === true) 和 if(i) 的区别 这两种写法核心区别在于判断逻辑的严格程度:
if(i)是判断变量i是否为真值:JavaScript里除了false、0、""(空字符串)、null、undefined、NaN这几个假值之外,其他所有值都会让这个条件成立。比如1、"hello"、{}(空对象)、[](空数组)这类值,都会触发if块里的代码。if(i === true)是严格全等判断:只有当i的类型和值都完全等于布尔值true时,条件才会成立。也就是说,只有i本身就是true这个布尔值的时候,才会进入if块。
举几个实际例子对比:
- 当
i = 1时:if(i)成立,if(i === true)不成立(因为1是number类型,true是boolean类型,严格全等要求类型和值都一致) - 当
i = "true"时:if(i)成立,if(i === true)不成立(字符串和布尔值类型不匹配) - 当
i = []时:if(i)成立,if(i === true)不成立(数组对象和布尔值类型不匹配) - 当
i = true时:两种写法的结果完全一致
所以能不能替换,要看原代码的业务意图:如果原代码本来就只想在i严格等于布尔值true的时候执行逻辑,那换成if(i)会导致很多非预期的真值触发代码,肯定不行;如果原代码只是想判断i不是假值,那替换是没问题的,但得确认原逻辑确实不需要严格判断为true。
内容的提问来源于stack exchange,提问作者A good person
相关产品推荐
相关产品推荐

