空值合并操作符(??)
只有当左侧为null或undefined时才会返回右侧的值,否则返回左侧操作数。
const value1 = 'hello world' ?? 'hi' // 'hello world'
const value2 = '' ?? 'hi' // ''
const value3 = false ?? 'hi' // false
const value4 = 0 ?? 'hi' // 0
const value5 = null ?? 'hi' // 'hi'
const value6 = undefined ?? 'hi' // 'hi'
??=(空值合并赋值操作符)
用于在变量为 null 或 undefined 时,将给定的默认值赋给该变量。
let value = null;
value ??= 'default';
console.log(value); // 输出: 'default'
// 等价于
if (value == null) { // <=> (x === null || x === undefined)
value = 'default';
}
let anotherValue = 'hello';
anotherValue ??= 'default';
console.log(anotherValue); // 输出: 'hello',因为变量已定义不为 null 或 undefined
// 注:针对Obj内的参数判断值为null或undefined赋值,更改原有的Obj
const a = { duration: 50 };
a.speed ??= 25;
console.log(a.speed); // 25
console.log(a) // Object { duration: 50, speed: 25 }
||=逻辑运算符
运算符用于左侧变量为假值时才进行赋值操作。
语法:a ||= b,意为若a为假,则将b赋值给a。
let x = 10;
let y = 0;
x ||= 5; // x仍为10,因为10被视为真值
y ||= 5; // y现在为5,因为0被视为假值
// 等价于
let b = a ? a : 5
&&=逻辑运算符
运算符用于左侧变量值为真(Truthy)时才进行赋值操作。
语法: a &&= b,意为若a为真,则将b赋值给a。
let a = null;
a &&= 10; // a仍为null
// 等价于
if (a) {
a = 10;
}