在JavaScript中,字符串"0"属于假值(falsy)还是真值(truthy)?
JS中字符串'0'的布尔判断陷阱与解决方案
在JS里,字符串'0'的布尔判断很容易让人懵:
- 用
Boolean('0')会返回true,因为所有非空字符串都是真值 - 但
'0' == false居然也返回true,从这里开始就乱了 - 再看
!'0' == false,结果还是true - 更离谱的是
'0' == !'0',这行代码返回的居然也是true?!
我之前遇到个场景:要把WebSocket流的数据存到MySQL,得把每个字符串字段转成对应的原始布尔类型。一开始用双非运算符!!转换,结果完全不符合预期——!!"1" == true和!!"0" == true都成立,没法区分"0"和"1"对应的布尔值。
最后折腾出两个可行的解决方案,针对输入字符串s:
- 方案一:
!!+s,先通过+把字符串转成数字,再用双非转成布尔值 - 方案二:
s == '1',直接判断字符串是否等于'1'来得到布尔结果
内容的提问来源于stack exchange,提问作者Nowan
相关产品推荐
相关产品推荐

