可选链与空值合并运算符

# 简述

? 可选链操作符: 探测对象上否存在需要的属性或方法,存在则访问、不存在则返回 undefined, 避免程序报错 不可以用于赋值

?? 空值合并操作符: 设置默认值,只有在值为 null 或 undefined 值,值才生效,与 || 操作符类似,但更严格限制

# ? 可选链操作符 用法

? 问目标对象上存不存在某个属性,有则返回,无则短路返回 undefined,避免抛出错误

// 访问属性是否存在
const foo = {}

foo.a.b // Uncaught TypeError:Cannot read property 'b' of undefined
foo?.a?.b // undefined
1
2
3
4
5
// 访问方法是否存在
const foo = {}
foo.a() //  Uncaught TypeError:foo.a is not a function
foo?.a?.() // undefined
1
2
3
4
// 不可以对其赋值
const foo = {}
foo.a = 3 // 可以
foo?.a = 3 // Uncaught SyntaxError: Invalid left-hand side in assignment
1
2
3
4

简单地说,可选操作符用于条件判断,比如简化对象属性是否存在的判断,避免出现类型错误

# ?? 空值合并操作符 用法

没什么好说的,注意当为 null 或 undefined 时,才生效

(null ?? 1) // 1 生效
(undefined ?? 1) // 1 生效
('' ?? 1) // '' 不生效
(0 ?? 1) // 0 不生效
(false ?? 1) // false 不生效

// 但 '' 0 false 使用 || 判断则生效
('' || 1) // 1
(0 || 1) // 1
(false || 1) //1
1
2
3
4
5
6
7
8
9
10

# ? 或 ?? 配合使用

绝配。

可选链接操作符 访问对象属性失败时,返回 undefined

空值合并操作符 对 undefined 生效,返回设置的默认值

const foo = {}
foo?.a ?? 1
1
2

# ?? 与 || 配合使用

用小括号强调优先级,否则报错

null || undefined ?? 'foo' // Uncaught SyntaxError: Unexpected token '??'

(null || undefined) ?? 'foo' // foo
1
2
3

Nullish Coalescing Operator (opens new window)

Optional Chaining (opens new window)

扫一扫,微信中打开

微信二维码