javascript中只有undefined、null、0(±0)、nan、""、document.all这6个值转布尔为false,其余均为true;boolean()和!!均可转换,但boolean语义更清晰,"0"、"false"、new boolean(false)等均属truthy。

JavaScript 中把任意数据类型转换为布尔类型,主要靠 Boolean() 构造函数或 双重取反(!!) 操作符,它们都遵循 JavaScript 的“真值(truthy)”和“假值(falsy)”规则。
哪些值会被转成 false(falsy 值)
只有 6 个值在转换为布尔时结果为 false:
- undefined
- null
- 0(包括 +0、-0)
- NaN
- ""(空字符串)
- document.all(仅浏览器环境,历史遗留,一般不用管)
其余所有值——包括 "false"、"0"、[]、{}、new Date()、function(){} 等——都是 truthy,转布尔为 true。
两种常用转换方式对比
Boolean(value) 是显式、语义清晰的写法:
console.log(Boolean("hello")); // true
console.log(Boolean([])); // true
!!value 是简写形式,本质是两次取反:!value 先转布尔再取反,!!value 再取反回来,等价于 Boolean:
console.log(!!{a:1}); // true
console.log(!!"0"); // true ← 注意:"0" 是字符串,非空即 true
特别注意的易错点
很多初学者误以为 "0"、"false"、new Boolean(false) 会转成 false,其实不会:
-
"0"是非空字符串 → true -
"false"是非空字符串 → true -
new Boolean(false)是对象(对象永远 truthy)→ true(⚠️不要用构造函数创建布尔对象) -
Boolean(false)才是 false(推荐用字面量false或Boolean())
实际判断建议
日常开发中,多数情况不需要显式转换,直接用于条件判断即可(JS 自动隐式转换):
if (arr && arr.length) { ... } // 安全检查数组if (obj && obj.name) { ... } // 避免访问 undefined.name
若需明确得到布尔值(比如存入状态、返回 API 结果),优先用 Boolean(),语义更清晰;!! 可用于简洁场景,但团队协作时要注意可读性。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











