// 1. ? var obj ={a:1,b:2} obj.c.a // 会报错:Uncaught TypeError: Cannot read properties of undefined,因为obj.c 不存在 解决方法: obj.c?.a // 等价于 obj.c && obj.c.a // ?是可选链操作符,在引用为空null 或者 undefined 的情况下不会引起错误,该表达式短路返回值是 undefined // 2. ?? // 空值合并运算符,在ES2020中新增,可以用来保证值不为 null 或者 undefined var a1=""; var b1=a1??"default1" // "" var a2=undefined; var b2=a2??"default2" // default2 var a3=null; var b3=a3??"default3" // default3 // 注:(??) 直接和 AND(&&)和 OR(||)一起用会报错,如果要一起用,记得单独给 ?? 左右表达式加括号,如: b=(a??"dffdfdf") || 123 // dffdfdf b=(a??"dffdfdf") && 123 // 123 // 3. 逻辑或(||) // 空值合并运算符将跳过 null,undefined // 逻辑或运算符会跳过 null,undefined,false false ?? 'hello' // false false || 'hello' // 'hello' // 如果不想用要虚值,可以使用 ||。如果只想检查是否为 null 或 undefined,就用 ??