JavaScript条件判断依据真假值规则:仅false、0(±0)、''、null、undefined、NaN为falsy,其余均为truthy;推荐用!!或Boolean()显式转换,避免==比较,并用?.和??安全访问嵌套属性。

JavaScript 中的条件判断不依赖变量是不是 true 或 false,而是看它在布尔上下文中是否被当作“真值”(truthy)或“假值”(falsy)。这个转换过程自动发生,但规则非常明确——只有 6 个值是 falsy,其余全是 truthy。
哪些值会被当成 false?
仅以下 6 种值在 if、while、三元运算等布尔上下文中被转为 false:
false-
0(包括+0和-0) -
''(严格空字符串,不含空格、制表符等) nullundefinedNaN
注意:'0'、'false'、' '(含空格)、[]、{}、new Date('invalid')、function(){} 全部是 truthy,哪怕语义上看起来像“假”。
怎么安全地判断一个值的真假性?
避免用 == true 或 == false,它们会触发意外类型转换。推荐两种清晰、可控的方式:
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
!!value:轻量简洁,适合逻辑表达式或条件分支中快速取布尔结果,例如const hasData = !!response?.items; -
Boolean(value):语义最直白,适合调试、日志或强调意图的场景,例如console.log('is valid:', Boolean(input));
二者行为完全一致:!!value === Boolean(value) 恒为 true。
嵌套属性访问怎么避免报错?
直接写 if (user.profile.name) 可能因 user 或 profile 为 null/undefined 报错。应配合可选链(?.)和空值合并(??):
-
if (user?.profile?.name):安全访问,遇到null/undefined就停止并返回undefined(falsy) -
const displayName = user?.name ?? '匿名用户';:提供默认回退值
常见误判例子与纠正
这些写法看似合理,实则容易出错:
-
if (input == true)→'1' == true是true,但'2' == true是false,逻辑断裂 -
if (data === true)→ 只能匹配字面量true,无法识别1、'ok'等 truthy 值 -
if (arr.length)→ 正确但略冗余;更自然的写法是if (arr.length > 0)或直接if (arr)(因数组对象恒为 truthy)
真正要表达“有内容”,优先用 if (arr.length) 或 if (str.trim());要表达“是布尔 true”,才用 === true。

















