JavaScript中判断值是否存在且为0/非0时返回0而非布尔值的问题
为什么JavaScript中
0 && 表达式返回0而不是false? 这是因为JavaScript里的&&逻辑运算符不是返回布尔值,而是返回它的操作数本身,遵循以下规则:
- 如果第一个操作数是假值(比如0、空字符串
''、null、undefined、NaN、false),直接返回这个假值,不会执行第二个操作数; - 如果第一个操作数是真值,才会执行并返回第二个操作数的结果。
结合你的代码例子来看:
const example = 0 console.log( example === 0 ) // true console.log( example && example !== 0 ) // 0 console.log( example && example === 0 ) // 0
- 第一行
example === 0是严格相等比较操作,这类比较操作本身就会返回布尔值,所以输出true没问题; - 第二、第三行里,
example的值是0,属于假值,所以&&直接返回第一个操作数0,完全不会去执行后面的example !== 0或example === 0,自然也就不会得到布尔结果。
如果你的需求是得到布尔值结果,可以用以下几种方式:
// 用Boolean()转换结果 console.log( Boolean(example && example !== 0) ) // false // 用双重否定转换 console.log( !!(example && example !== 0) ) // false // 直接写明确的条件判断(逻辑更清晰) console.log( example !== undefined && example !== 0 ) // false
内容的提问来源于stack exchange,提问作者Stephanos
相关产品推荐
相关产品推荐

