JavaScript中如何正确判断变量为true/false/null并设置默认数组?
解决JavaScript中仅针对null/undefined设置默认值的问题
这确实是JavaScript里很容易踩的一个小坑——你之前用的||逻辑或运算符会把所有假值(包括false、0、空字符串''、null、undefined)都当成“需要替换默认值”的情况,而你只希望在变量是null或undefined时才赋值默认数组对吧?
下面给你两种更优雅的实现方式:
1. 空值合并运算符 ??(推荐,ES2020+支持)
这是ES2020新增的运算符,专门用来解决“仅针对null/undefined设置默认值”的场景,完全符合你的需求:
const boolFromBody = false; const myBool = boolFromBody ?? [true, false]; console.log(myBool); // 输出: false(保留了原本的false值) const nullCase = null; const myBool2 = nullCase ?? [true, false]; console.log(myBool2); // 输出: [true, false](触发默认值) const undefinedCase = undefined; const myBool3 = undefinedCase ?? [true, false]; console.log(myBool3); // 输出: [true, false](触发默认值)
它的逻辑很简单:只有当左侧表达式的值是null或undefined时,才返回右侧的默认值;其他所有值(哪怕是false这种假值)都会直接返回左侧本身。
2. 兼容旧环境的显式判断写法
如果你的代码需要运行在不支持ES2020的环境中,可以用三元运算符简化原来的if判断:
const boolFromBody = false; const myBool = (boolFromBody === null || boolFromBody === undefined) ? [true, false] : boolFromBody; console.log(myBool); // 输出: false
这种写法和你原来的逻辑完全一致,但更简洁,一行就能搞定。
总结一下:??是最贴合你需求的现代写法,代码简洁且语义明确;如果要兼容旧环境,就用显式的三元判断代替冗余的if语句。
内容的提问来源于stack exchange,提问作者delmin
相关产品推荐
相关产品推荐

