TypeScript 中的 ??
和 ||
操作符的区别
在TypeScript中,??
和 ||
是两种不同的逻辑运算符,它们在处理变量默认值时有不同的行为。
||
操作符(逻辑或)
||
是逻辑或操作符,它会返回第一个真值(truthy value),如果第一个操作数是一个假值(falsy value),那么它会返回右边的操作数。在JavaScript中,假值包括 false
、0
、""
(空字符串)、null
、undefined
和 NaN
。例如:
let a = 0;
let b = a || 10; // b 的值为 10,因为 0 是假值
??
操作符(空值合并)
??
是空值合并操作符,它会返回第一个非空值(nullish value),即非 null
和 undefined
。如果第一个操作数是 null
或 undefined
,那么它会返回右边的操作数。其他值都不会影响结果。例如:
let a = 0;
let b = a ?? 10; // b 的值为 0,因为 0 不是 null 或 undefined
主要区别
||
操作符会对所有的假值进行判断,并返回第二个操作数。??
操作符只会将null
和undefined
视为空值,其他值都不会影响结果。??
操作符的优先级比||
高,因此在使用时应注意使用适当的括号来确保表达式的正确性.
在实际编程中,应该根据需要处理的值类型和场景选择合适的操作符。如果需要为任何假值提供默认值,可以使用 ||
。如果只需要为 null
或 undefined
提供默认值,而保留 false
、0
、""
等有效值,则应该使用 ??
.