JavaScript 中的逻辑运算符用于对布尔值进行逻辑操作,或者对值进行布尔判断。以下是主要的逻辑运算符:
expr1 && expr2
expr1
可以转换为 false
,则返回 expr1
;否则返回 expr2
true && true // 返回 true
true && false // 返回 false
false && true // 返回 false
false && false // 返回 false
// 短路行为
0 && 5 // 返回 0 (因为0是假值)
3 && 4 // 返回 4 (因为3是真值)
expr1 || expr2
expr1
可以转换为 true
,则返回 expr1
;否则返回 expr2
true || true // 返回 true
true || false // 返回 true
false || true // 返回 true
false || false // 返回 false
// 短路行为
0 || 5 // 返回 5 (因为0是假值)
3 || 4 // 返回 3 (因为3是真值)
!expr
!true // 返回 false
!false // 返回 true
!0 // 返回 true
!1 // 返回 false
!!"hello" // 返回 true (双非运算符用于强制转换为布尔值)
expr1 ?? expr2
expr1
是 null
或 undefined
,则返回 expr2
;否则返回 expr1
||
不同,它只针对 null
和 undefined
null ?? 'default' // 返回 'default'
undefined ?? 42 // 返回 42
0 ?? 42 // 返回 0 (与 || 不同)
'' ?? 'default' // 返回 '' (与 || 不同)
obj?.prop
或 obj?.[expr]
或 func?.(args)
const user = {
name: 'John',
address: {
city: 'New York'
}
};
user?.address?.city // 'New York'
user?.contacts?.phone // undefined (不会抛出错误)
user.sayHello?.() // 如果sayHello不存在则不会调用
JavaScript 的逻辑运算符具有短路行为:
&&
:如果第一个操作数为假,不会计算第二个操作数||
:如果第一个操作数为真,不会计算第二个操作数??
:如果第一个操作数不是 null
或 undefined
,不会计算第二个操作数// 示例:短路行为
function logMessage() {
console.log('函数被调用');
return true;
}
true || logMessage() // logMessage不会被调用
false && logMessage() // logMessage不会被调用
null ?? logMessage() // logMessage会被调用
逻辑运算符是 JavaScript 编程中非常重要的基础,理解它们的特性和行为对于编写高效、简洁的代码至关重要。