JavaScript 逻辑运算符
逻辑运算符用于布尔值运算,返回布尔值或操作数本身,是条件判断的核心。
三种逻辑运算符
| 运算符 | 名称 | 描述 |
|---|---|---|
&& | 逻辑与 | 两个都为真则返回真 |
|| | 逻辑或 | 至少一个为真则返回真 |
! | 逻辑非 | 取反 |
逻辑与 &&
JavaScript
// 基本用法
console.log(true && true); // true
console.log(true && false); // false
console.log(false && true); // false
console.log(false && false); // false
// 短路求值:第一个为假,不计算第二个
let x = 0;
false && (x = 1); // x 仍为 0,第二个表达式不执行
console.log(x); // 0
// 返回值规则:返回第一个假值或最后一个值
console.log(1 && 2); // 2(都为真,返回最后一个)
console.log(0 && 2); // 0(第一个为假,返回第一个)
console.log(null && 2); // null
console.log(1 && 0 && 3); // 0(遇到假值返回)
逻辑或 ||
JavaScript
// 基本用法
console.log(true || true); // true
console.log(true || false); // true
console.log(false || true); // true
console.log(false || false); // false
// 短路求值:第一个为真,不计算第二个
let y = 0;
true || (y = 1); // y 仍为 0,第二个表达式不执行
console.log(y); // 0
// 返回值规则:返回第一个真值或最后一个值
console.log(1 || 2); // 1(第一个为真,返回第一个)
console.log(0 || 2); // 2(第一个为假,返回第二个)
console.log(null || 2); // 2
console.log(0 || '' || 3); // 3(遇到真值返回)
逻辑非 !
JavaScript
// 基本用法
console.log(!true); // false
console.log(!false); // true
console.log(!0); // true
console.log(!1); // false
console.log(!''); // true
console.log(!'hi'); // false
// 双重否定:转为布尔值
console.log(!!1); // true
console.log(!!0); // false
console.log(!!'hello'); // true
console.log(!!null); // false
假值(Falsy Values)
JavaScript
// JavaScript 中的假值
false // false
0 // false
-0 // false
0n // false
'' // false(空字符串)
null // false
undefined // false
NaN // false
// 其他值都为真值(Truthy)
console.log(![]); // false(数组是真值)
console.log(!{}); // false(对象是真值)
console.log(!'false'); // false(非空字符串是真值)
实际应用
JavaScript
// 默认值设置
function greet(name) {
name = name || 'Guest';
console.log('Hello, ' + name);
}
greet(); // Hello, Guest
greet('Tom'); // Hello, Tom
// 条件执行
const user = { name: 'Tom', isAdmin: true };
user.isAdmin && console.log('Admin access');
// 安全访问
const data = null;
const value = data && data.value; // null(安全,不会报错)
// 双重否定转布尔
const items = [];
const isEmpty = !!items.length; // false
空值合并运算符 ??(ES2020)
JavaScript
// ?? 只在 null/undefined 时使用右侧值
console.log(null ?? 'default'); // 'default'
console.log(undefined ?? 'default'); // 'default'
console.log(0 ?? 'default'); // 0
console.log('' ?? 'default'); // ''
console.log(false ?? 'default'); // false
// 对比 ||
console.log(0 || 'default'); // 'default'(0 是假值)
console.log(0 ?? 'default'); // 0(0 不是 null/undefined)
注意事项
&&和||返回的是操作数的值,不一定是布尔值- 短路求值可用于条件执行,但不要过度使用影响可读性
??与||的区别:??只检查null和undefined
JavaScript
// 优先级:! > && > ||
console.log(true || false && false); // true(&& 先执行)
console.log((true || false) && false); // false
// 混合使用建议加括号
const result = (a > 0) && (b > 0) || (c > 0);
要点总结
&&:与运算,返回第一个假值或最后一个值,第一个为假则短路||:或运算,返回第一个真值或最后一个值,第一个为真则短路!:非运算,返回布尔值,!!可将任意值转为布尔值??:空值合并,只在null/undefined时使用默认值- 假值:
false、0、''、null、undefined、NaN
📝 发现内容有误?点击此处直接编辑