SOURCE

// 1.指数运算符
2 ** 2 // 4
2 ** 3 // 8
// 相当于 2 ** (3 ** 2)
2 ** 3 ** 2

let a = 1.5;
a **= 2;
console.log(a)
// 等同于 a = a * a;

let b = 4;
b **= 3;
// 等同于 b = b * b * b;

// 2. 链判断运算符
// 上面代码使用了?.运算符,
// 直接在链式调用的时候判断,左侧的对象是否为null或undefined。
// 如果是的,就不再往下运算,而是返回undefined。

// 2.1 直接对象取值
const message = {
    body: 1
}
const firstName = message?.body?.user?.firstName
console.log(firstName)

// 2.2 链判断运算符?.有三种写法。
// obj?.prop // 对象属性是否存在
// obj?.[expr] // 同上
// func?.(...args) // 函数或对象方法是否存在

// 3. Null 判断运算符
// 引入了一个新的 Null 判断运算符??。
// 它的行为类似||,但是只有运算符左侧的值为null或undefined时,才会返回右侧的值。
// 这个运算符的一个目的,就是跟链判断运算符?.配合使用,为null或undefined的值设置默认值。

// let response = undefined
// let response = null
let response = {
    settings: {
        // animationDuration: 1
    }
}
const animationDuration = response.settings?.animationDuration ?? 300
console.log(animationDuration)
console 命令行工具 X clear

                    
>
console