实用方法

运算符

无先后顺序

1. a ?? b

1
2
a || b // 当 a 为 假(包含'',0等),返回 b
a ?? b // 仅当 a 等于 null 或 undefined 返回 b

2. 逻辑且赋值 x &&= y

仅当 x 为真时赋值

1
2
3
4
5
6
7
8
9
let a = 1;
let b = 0;

a &&= 2;
console.log(a);
// expected output: 2

b &&= 2;
console.log(b);

3. 逻辑空赋值 x ??= y

仅当 x 为 null 或 undefined 赋值

1
2
3
4
5
6
7
8
9
const a = { duration: 50 };

a.duration ??= 10;
console.log(a.duration);
// expected output: 50

a.speed ??= 25;
console.log(a.speed);
// expected output: 25

4. 逻辑假赋值 x ||= y

仅当x是假的时候赋值

1
2
3
4
5
6
7
8
9
const a = { duration: 50, title: '' };

a.duration ||= 10;
console.log(a.duration);
// expected output: 50

a.title ||= 'title is empty.';
console.log(a.title);
// expected output: "title is empty"

5.可选链操作符 ?.

可选链操作符( ?. )允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空(nullish ) (null 或者 undefined) 的情况下不会引起错误,该表达式短路返回值是 undefined。与函数调用一起使用时,如果给定的函数不存在,则返回 undefined

1
2
3
4
5
6
7
8
9
10
11
12
13
const adventurer = {
name: 'Alice',
cat: {
name: 'Dinah'
}
};

const dogName = adventurer.dog?.name;
console.log(dogName);
// expected output: undefined

console.log(adventurer.someNonExistentMethod?.());
// expected output: undefined