在 javascript 中,所有对象(包括空对象、数组、正则等)转布尔值恒为 true,不调用 tostring 或 valueof;需手动检查 length、size 或 keys 数量来判断“是否为空”。

在 JavaScript 中,对象转布尔值时总是为 true,无论对象内容如何——这是强制类型转换的固定规则,不依赖内部属性或方法。
所有对象都视为真值(truthy)
只要是一个对象(包括空对象、数组、正则、日期、自定义类实例等),在布尔上下文中都会被转换为 true:
Boolean({}) === trueBoolean([]) === trueBoolean(/abc/) === trueBoolean(new Date()) === trueBoolean(new Map()) === true
没有例外,也没有隐式调用 toString 或 valueOf
与字符串或数字转换不同,对象转布尔值不会尝试调用 toString() 或 valueOf() 方法。即使你重写了这些方法,也不会影响布尔转换结果:
const obj = { toString() { return ''; }, valueOf() { return 0; } };Boolean(obj) // 仍是 trueif (obj) { console.log('执行了'); } // 一定会执行
想按“是否有内容”判断?需手动实现
若希望空数组、空对象等表现为 false,必须显式检查,例如:
- 数组:用
arr.length === 0 - 普通对象:用
Object.keys(obj).length === 0 - Map/Set:用
map.size === 0 - 字符串:用
str.trim() === ''
注意:不要写成 !obj || !obj.length 来判断数组,因为 !{} 是 false,但 {}.length 是 undefined,容易出错。
和 if/while 等语句的关系
所有条件语句中的对象都会进入“真分支”,例如:
if ({}) { /* 这里总会执行 */ }while ([]) { break; } // 循环体至少执行一次-
!!{} === true(双重非是常见的显式转布尔写法,但结果仍为 true)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











