You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何new Boolean(false)的Boolean强制转换结果为true?

关于Boolean强制转换不符合预期的解析

核心原因:区分原始布尔值与Boolean包装对象

JavaScript里存在两种布尔相关的值:

  • 原始布尔值:直接声明的true/false,属于基本数据类型
  • Boolean包装对象:通过new Boolean(...)创建的实例,属于引用类型(对象)

两者的布尔强制转换规则完全不同,这是问题的关键所在。

1. 为什么!!(new Boolean(false)) === true?

new Boolean(false)创建的是一个对象实例,而非原始布尔值。在JavaScript的布尔强制转换规则中:

所有引用类型(对象、数组、函数等)在布尔上下文里都会被判定为truthy(真值)

!!是两次逻辑非操作:

  • 第一次!new Boolean(false)会把对象转为布尔值true,再取反得到false
  • 第二次!false取反得到true
    最终结果自然是true。

2. 为什么new Boolean(false).valueOf() === false?

valueOf()是Boolean对象的内置方法,它的作用就是返回该对象所包装的原始布尔值,所以这里直接返回构造时传入的false,符合预期。

3. 为什么Boolean(new Boolean(false)) === true?

Boolean()作为转换函数使用时:

  • 如果传入的是原始布尔值,会按照MDN所说的“Booleans are returned as-is”原样返回
  • 如果传入的是对象(包括Boolean包装对象),则会执行对象到布尔值的转换,遵循“所有对象都是truthy”的规则,因此返回true

你对MDN中“as-is”的误解在于:这里的“Booleans”特指原始布尔值,而非Boolean包装对象。只有原始布尔值在强制转换时才会直接返回自身,对象则会按引用类型的规则处理。


内容的提问来源于stack exchange,提问作者ceving

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 11:33:01