在初学一门语言时,我们容易对类型掌握得不够清晰。比如在做二叉树相关题目时,当需要判断根节点是否为空,新手总是不清楚判断语句括号中应当选择 !root
还是 root !== null
,造成困扰。
所以,今天我们就来聊聊 !root
与 root !== null
之间的区别。
1. 逻辑含义不同
!root
:这是对root
进行逻辑非运算。逻辑非运算会先将root
转换为布尔值,然后取反。在 JavaScript 中,有 6 个值被视为“假值”,分别是false
、0
、''
(空字符串)、null
、undefined
和NaN
,对这些值进行逻辑非运算会得到true
;而对于其他值,逻辑非运算会得到false
。root !== null
:这是一个严格不等比较,它只检查root
是否不等于null
。也就是说,只有当root
的值恰好为null
时,表达式结果为false
;其他任何值,包括undefined
、0
、''
等,表达式结果都为true
。
2. 示例代码及结果分析
// 1. 当 root 为 null 时
let root = null;
console.log(!root); // 输出: true,因为 null 是假值,取反后为 true
console.log(root !== null); // 输出: false,因为 root 等于 null
// 2. 当 root 为 undefined 时
root = undefined;
console.log(!root); // 输出: true,因为 undefined 是假值,取反后为 true
console.log(root !== null); // 输出: true,因为 root 不等于 null
// 3. 当 root 为 0 时
root = 0;
console.log(!root); // 输出: true,因为 0 是假值,取反后为 true
console.log(root !== null); // 输出: true,因为 root 不等于 null
// 4. 当 root 为非假值时
root = 1;
console.log(!root); // 输出: false,因为 1 是真值,取反后为 false
console.log(root !== null); // 输出: true,因为 root 不等于 null
3. 在代码中的应用场景区别
!root
:当你只关心root
是否为“假值”,只需要判断一个变量是否有有效的值,而不关心具体是什么类型的假值时,可以使用!root
。root !== null
:当你明确需要判断root
是否不等于null
时,就应该使用root !== null
。比如在处理二叉树节点时,通常需要明确区分节点是null
还是其他值,这时使用root !== null
更为合适。
综上所述,!root
和 root !== null
在逻辑和应用场景上有明显的区别,使用时需要根据具体需求来选择合适的表达式。