if语句已自动执行真值检测,其中使用!!运算符是否属于冗余?
结论
if 条件判断中直接使用 !! 属于完全冗余操作,二者的转换逻辑没有任何差异,不存在例外场景。
核心逻辑说明
JS 中 if 语句对括号内表达式做真值检测时,调用的是引擎内置的 ToBoolean 抽象转换逻辑,和 !! 运算符、Boolean() 构造函数的转换规则100%一致:
- 以下值转换后均为
false:undefined、null、0、NaN、空字符串(''/""/) - 其余所有值(包括所有对象、数组、非空字符串、非零数字等)转换后均为
true
你给出的示例中,if (!!user) 和直接写 if (user) 运行结果完全相同,对执行逻辑没有任何影响。
为什么还有人这么写
这种写法的存在和技术逻辑无关,主要是代码风格层面的原因:
- 显式标注转换意图:部分开发者习惯通过
!!明确告知后续维护代码的人,这里是主动做了真值到布尔值的转换,避免其他人误以为此处是在判断变量是否严格等于true - 新手认知不足:部分初级开发者不清楚
if会自动做隐式类型转换,主动加!!保证判断的是布尔值 - 代码复用习惯延伸:很多场景下我们需要把转换后的布尔值存为变量复用,比如
const isValid = !!inputValue,后续不仅可以用在if判断里,还可以作为返回值、props 传递,部分开发者会把这个习惯直接带到if条件的书写里
内容的提问来源于stack exchange,提问作者privacyisimportant
相关产品推荐
相关产品推荐

