Skip to content

新增的运算符

运算符运算符含义操作数个数操作数类型要求组成的表达式的值的类型组成的表达式有无副作用
**指数运算符2numbernumber
?.可选链运算符2undefined或其他
??空值判断运算符2多种
&&=逻辑与赋值2左边操作数是变量的形式左边操作数重新赋值之后的值作为表达式的值
||=逻辑或赋值2左边操作数是变量的形式左边操作数重新赋值之后的值作为表达式的值
??=空值判断赋值2左边操作数是变量的形式左边操作数重新赋值之后的值作为表达式的值

指数运算符

a ** b

js
2 ** 10;  // 2 的 10 次方
89 ** 3;  // 89 的 3 次方

可选链运算符

a?.b

?. 用于调用对象的属性方法,尤其适合链式调用,调用过程中一旦得到 undefined,直接结束(短路),并以undefined作为整个表达式的值。

?. 代替 .

js
对象?.属性名
对象?.属性名?.属性名

对象.方法名?.()

案例

js
const user = {
    address: '上海',
    age: 12,
    child: {
        age: 2,
        address: '北京'
    },
    say() {
        return 'say';
    }
};


console.log(user.address);
console.log(user.child.address);
console.log(user.parent);   // undefined
// console.log(user.parent.address);   报错
console.log('');


// ?. 代替 .
console.log(user?.address);
console.log(user?.child?.address);
console.log(user?.parent);              // undefined
console.log(user?.parent?.address);     // undefined
console.log('');


// 使用可选链运算符调用方法
// user.eat();  报错 undefined不是function
console.log(user.say?.()); //say
console.log(user.eat?.()); //undefined

空值判断运算符

a ?? b

js
如果第一个操作数是 null 或者 undefined,取第二个操作数作为表达式的值;
如果第一个操作数不是 null 或者 undefined,取第一个操作数作为表达式的值,且不再执行第二个操作数。
js
0 ?? 100;   // 0
false ?? 100; // false
null ?? 100; // 100
undefined ?? 100;  // 100

案例

js
// 逻辑或运算符
console.log(100 || 'hello');  // 100
console.log(false || 'hello');  // hello
console.log(0 || 'hello');  // hello
console.log(undefined || 'hello'); // hello
console.log('');


console.log(100 ?? 'hello'); //100
console.log(0 ?? 'hello');  //0
console.log(false ?? 'hello'); //false
console.log(undefined ?? 'hello'); //hello
console.log(null ?? 'hello');   //hello

逻辑赋值运算符

逻辑与运算符组成的表达式的值:

a && b

js
如果第一个操作数成立,取第二个操作作为表达式的值
如果第一个操作数不成立,取第一个操作作为表达式的值,第二个操作不会被执行到

逻辑或运算符组成的表达式的值:

a || b

js
如果第一个操作数成立,取第一个操作数作为表达式的值,第二个操作数不会被执行到
如果第一个操作数不成立,取第二个操作数作为表达式的值
js
x &&= y;  // 相当于 x = x && y;
x ||= y;  // 相当于 x = x || y;
x ??= y;  // 相当于 x = x ?? y;
js
let a1 = 10;
let a2 = 20;
let a3 = 30;

// &&=
a1 &&= 250;   // a1 = a1 && 250;  或者 a1 && (a1 = 250)
// 100 &&= 200;  // 100 = 100 && 200;
console.log(a1); //250
console.log('');

a2 ||= 250;
console.log(a2);    //20
console.log('');


a3 ??= 250;   // a3 = a3 ?? 250
console.log(a3);    //30
console.log('');