简单写了个小demo,直接贴代码吧
<script>
// 1、?? 空值合并运算符
console.log(null ?? 'right null'); // right null;
console.log(undefined ?? 'right undefined'); // right undefined
console.log(true ?? 'right true'); // true
console.log(false ?? 'right false'); // false
console.log(7 ?? 'right numbert'); // 7
console.log('' ?? 'right empty text'); // ''
// 总结:当左侧是null或者undefined的时候,返回右侧内容,否则返回左侧内容
// 2、?. 链判断运算符
const param = {
name: 'Carmen',
cat: {
name: 'Mustard'
},
play(){
console.log('happy');
}
};
console.log(param?.name); // Carmen
console.log(param.cat?.name); // Mustard
console.log(param.dog?.name); // undefined
console.log(param.play?.()); // happy undefined
console.log(param?.play()); // happy & undefined
console.log(param.eat?.()); // undefined
// console.log(param?.eat()); // Uncaught TypeError: param?.eat is not a function
let arr = ['one', 'two', 'three'];
console.log(arr?.[0]); // one
console.log(arr?.[3]); // undefined
let fun = () => console.log('fun is function');
console.log(fun?.()); // fun is funtion & undefined
// console.log(fake?.()); // Uncaught ReferenceError: fake is not defined
// 总结:用来判断对象的属性值,当前对象若不为null,则返回该对象下面的属性或方法;为null则返回undefined
// 3、??= 空赋值运算符
let a = 0;
a ??= 1;
console.log(a); // 0
let b = null;
b ??= 1;
console.log(b); // 1
let c = undefined;
c ??= 1;
console.log(c); // 1
let d = true;
d ??= 1;
console.log(d); // true
let f = false;
f ??= 1;
console.log(f); // false
let e = '';
e ??= 1;
console.log(e); // ''
let g = NaN;
g ??= 1;
console.log(g); // NaN
let h = {};
h ??= 1;
console.log(h); // {}
let i = [];
i ??= 1;
console.log(i); // []
// 总结:在左侧值是null或者undefined的时候,进行右侧赋值
</script>