!!能将任意值转为布尔值,因其先用!将操作数转布尔并取反,再用!取反一次,等价于boolean(x);javascript中falsy值(false、0、""、null、undefined、nan)经!!后为false,其余均为true。

JavaScript 中连续两次使用逻辑非(!!)是将任意值转为布尔值的常用写法,本质是利用了逻辑非运算的隐式类型转换规则。
为什么 !! 能转成布尔值
逻辑非 ! 会先将操作数转为布尔值,再取反;两次取反就抵消了取反效果,只保留了“转布尔”这一步:
-
!x:把x转为布尔值后取反(即得到“假值的相反”) -
!!x:对!x再取反,结果等价于Boolean(x)
哪些值会被转成 false
以下“假值”(falsy values)经 !! 后结果为 false:
false-
0(包括-0和0n) -
""(空字符串) nullundefinedNaN
其余所有值(如 1、"hello"、[]、{}、function(){}、new Date() 等)都是“真值”(truthy),!! 后为 true。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
和 Boolean() 的区别
!!x 和 Boolean(x) 功能完全等价,但 !! 更简洁、常见于条件判断或类型归一化场景:
-
const isActive = !!user.status;(比Boolean(user.status)少打 5 个字符) - 在函数参数默认值、配置合并、状态标记中广泛使用
- 注意:它不改变原值,只是返回对应布尔结果
实际用法示例
常见安全转换写法:
!!"abc" → true-
!![] → true(空数组是真值) -
!!{} → true(空对象是真值) !!null → false!!(obj && obj.prop) → 安全检测嵌套属性是否存在
不推荐用于需要明确语义的场景(如文档、教学),此时 Boolean() 可读性更好。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










