JavaScript中Boolean构造函数的异常行为求解
为什么
new Boolean(false)在if判断中会被视为真值? 核心原因在于JavaScript中原始布尔值和Boolean包装对象的区别:
- 直接写
true或false时,你使用的是原始布尔类型,在条件判断里会直接以其本身的布尔值作为判断依据。 - 当你用
new Boolean(xxx)创建值时,得到的是一个Boolean类型的对象——而JavaScript的条件判断逻辑里,所有对象(包括包装对象)都会被判定为真值,不管这个对象内部封装的原始值是什么。
结合你的例子具体分析:
if (new Boolean(true)):这里的条件是一个Boolean对象,被视为真值,所以执行alert("1"),和预期一致。if (new Boolean(false)):虽然这个对象内部存储的原始值是false,但它本身是一个对象,条件判断时会直接认定为真值,因此依然执行alert("1"),这就是和预期不符的关键。- 而直接写
if (false)时,用的是原始布尔值,条件为假,所以执行alert("2"),符合预期。
如果想要基于布尔值的实际内容做判断,不要用new Boolean(),直接使用原始布尔值,或者调用不带new的Boolean()函数(它会返回原始布尔值):
if (Boolean(false)) { alert("1"); } else { alert("2"); // 这里会执行else分支 }
内容的提问来源于stack exchange,提问作者Kandy
相关产品推荐
相关产品推荐

