双叹号(!!)转布尔值等价于boolean(value),javascript中false、0、-0、0n、""、null、undefined、nan为假值,其余均为真值;二者行为完全一致,仅为语法糖。

用双叹号(!!)转布尔值,本质是先转为布尔再取反两次,结果等价于 Boolean(value),但写法更短。
哪些值会被转成 false
JavaScript 有 6 个“假值”(falsy): false、0、-0、0n(BigInt 零)、""(空字符串)、null、undefined、NaN。其他所有值都是真值(truthy),包括 {}、[]、new Date()、function(){} 等。
-
!!0→false -
!!""→false -
!!null→false -
!![]→true(空数组也是 truthy) -
!!{}→true(空对象同理)
和 Boolean() 的区别在哪
行为完全一致,只是语法糖。双叹号不改变逻辑,只简化写法。
-
!!"hello"和Boolean("hello")都返回true -
!!undefined和Boolean(undefined)都返回false - 二者都遵循相同强制转换规则,没有例外或隐含差异
实际使用建议
适合快速判断变量是否存在或非空,尤其在条件分支、默认值处理中简洁有效。
- 检查用户输入是否有效:
if (!!userName) { ... } - 设置默认布尔配置:
const isEnabled = !!config.enabled; - 避免误判空数组/对象:
!!userList为 true,即使userList.length === 0 - 注意:它不校验内容有效性,比如
!!{a: undefined}仍是true
容易踩的坑
别把它当成“非空检测”的万能方案,尤其对对象和数组要额外小心。
-
!!{}是true,但对象可能全是undefined属性 -
!![]是true,但数组可能为空 —— 如需判断长度,应写arr.length > 0 - 数字
0和字符串"0"不同:!!"0"是true,因为非空字符串是 truthy - 避免嵌套使用,如
!!!value,可读性差且易出错
不复杂但容易忽略细节,用对场景才真正省事。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











