全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-16 5 分钟 ✍️ juanwangdev

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)

注意事项

  • &&|| 返回的是操作数的值,不一定是布尔值
  • 短路求值可用于条件执行,但不要过度使用影响可读性
  • ??|| 的区别:?? 只检查 nullundefined
JavaScript
// 优先级:! > && > ||
console.log(true || false && false);  // true(&& 先执行)
console.log((true || false) && false); // false

// 混合使用建议加括号
const result = (a > 0) && (b > 0) || (c > 0);

要点总结

  • &&:与运算,返回第一个假值或最后一个值,第一个为假则短路
  • ||:或运算,返回第一个真值或最后一个值,第一个为真则短路
  • !:非运算,返回布尔值,!! 可将任意值转为布尔值
  • ??:空值合并,只在 null/undefined 时使用默认值
  • 假值:false0''nullundefinedNaN

📝 发现内容有误?点击此处直接编辑

← 上一篇 JavaScript 赋值运算符
下一篇 → JavaScript ES6 类与继承
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库