javascript中boolean()显式转换的falsy值仅有6个:false、0(含±0)、''、null、undefined、nan;其余均为truthy,包括'0'、'false'、[]、{}、函数及new boolean(false)等对象。

JavaScript中用Boolean构造函数显式转换值时,对假值(falsy)的判定规则与if语句或逻辑运算中的隐式转换完全一致:只有6个值会被转为false,其余全部为true。
哪些值是Falsy(被Boolean()转为false)
以下6个值调用Boolean(value)会返回false:
-
false(布尔字面量本身) -
0(数字零,包括-0和+0) -
''(空字符串,不含任何字符,包括空格、制表符等) nullundefinedNaN
注意:document.all在旧版浏览器中曾被设计为falsy,但这是历史遗留非标准行为,现代标准中不视为falsy,Boolean(document.all)返回true。
常见易混淆的“看似假值”实为Truthy
这些值常被误认为是falsy,但实际调用Boolean()会返回true:
-
'0'(字符串"0")→true -
'false'(字符串"false")→true -
[](空数组)→true -
{}(空对象)→true -
function(){}(空函数)→true -
new Boolean(false)→true(因为是对象,所有对象都是truthy)
关键点:Boolean构造函数只做原始值转换;若传入对象(包括new Boolean(false)),它先调用对象的valueOf()或toString(),但最终判断的是该对象本身——而所有对象在布尔上下文中都为true。
Boolean() vs. 双叹号(!!)
二者行为完全等价:
-
Boolean(0)≡!!0→false -
Boolean('')≡!!''→false -
Boolean([])≡!![]→true
双叹号是更简洁的显式类型转换写法,本质就是两次取反:第一次转为布尔并取反,第二次再取反还原,效果等同于Boolean()。
慎用new Boolean()构造实例
用new Boolean(value)创建的是包装对象,不是原始布尔值:
-
typeof new Boolean(false)→"object" -
new Boolean(false) == false→true(抽象相等,会拆箱) -
new Boolean(false) === false→false(严格相等,类型不同) -
if (new Boolean(false)) { ... }→ 代码块仍会执行(因为对象是truthy)
因此,除非有特殊需求,应始终使用Boolean(value)(不带new)进行类型转换,避免意外行为。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











