概括

1. 逻辑与(&&)
作用:两边表达式都为
true时,结果才为true;否则为false。短路特性:如果左边表达式为
false,右边表达式不会执行。
typescript
运行
let a: boolean = true;
let b: boolean = false;
console.log(a && b); // 输出:false
let x: number = 1;
console.log(b && (x++ > 0)); // 左边为false,右边不执行,x仍为1
2. 逻辑或(||)
作用:两边表达式有一个为
true时,结果就为true;否则为false。短路特性:如果左边表达式为
true,右边表达式不会执行。
typescript
运行
console.log(a || b); // 输出:true
let y: number = 1;
console.log(a || (y++ > 0)); // 左边为true,右边不执行,y仍为1
3. 逻辑非(!)
作用:对表达式取反,
true变false,false变true。
typescript
运行
console.log(!a); // 输出:false
console.log(!b); // 输出:true
4. 空值合并运算符(??)
作用:属于逻辑运算符的扩展,专门处理
null/undefined,左边为null或undefined时返回右边值,否则返回左边值。短路特性:左边非空时,右边表达式不会执行。
typescript
运行
let c: number | null = null;
let d: number = 5;
console.log(c ?? d); // 输出:5(c为null)
let e: number = 3;
console.log(e ?? d); // 输出:3(e非空)
5. 可选链与逻辑运算结合(?.)
虽然
?.是可选链运算符,但常与逻辑运算结合,避免访问null/undefined的属性导致错误:
typescript
运行
let obj: { name?: string } = {};
console.log(obj.name?.length > 0 || false); // 输出:false
注意事项
逻辑运算符的优先级:
!>&&>||,复杂表达式建议用括号明确优先级。&&和||返回的是实际表达式的值,而非严格布尔值(但可隐式转换为布尔值):
typescript
运行
console.log(0 && 5); // 输出:0(左边为false,直接返回0)
console.log(5 || 0); // 输出:5(左边为true,直接返回5)