18. logical-assignment-operators
- // 例子 18-1
- a ||= b;
- obj.a.b ||= c;
- a &&= b;
- obj.a.b &&= c;
Babel 编译为:
- var _obj$a, _obj$a2;
- a || (a = b);
- (_obj$a = obj.a).b || (_obj$a.b = c);
- a && (a = b);
- (_obj$a2 = obj.a).b && (_obj$a2.b = c);
出现的原因:
- // 例子 18-2
- function example(a = b) {
- // a 必须是 undefined
- if (!a) {
- a = b;
- }
- }
- function numeric(a = b) {
- // a 必须是 null 或者 undefined
- if (a == null) {
- a = b;
- }
- }
- // a 可以是任何 falsy 的值
- function example(a = b) {
- // 可以,但是一定会触发 setter
- a = a || b;
- // 不会触发 setter,但可能会导致 lint error
- a || (a = b);
- // 就有人提出了这种写法:
- a ||= b;
- }