js中不常见但非常实用的运算符
# 空值合并运算符??
空值在js中是个很神奇的存在,我们通常使用!value来判断值value是否为空,但其实空字符串并不是真正的空值,空值(Null Value)表示一个空对象或未定义的值。JavaScript中的空值可以使用关键字null来表示。显然空字符串并不是真正的空值,这里js提供空值合并运算符用于处理空值的情况。合并运算符使用??表示,它可以将一个表达式的值与另一个默认值进行合并。如果表达式的值为空值(null或undefined),则使用默认值。
let value1 = null,value2 = undefined, value3 = 0, value4 = ''
let result1 = value1 ?? '空值' // 空值
let result2 = value2 ?? '空值' // 空值
let result3 = value3 ?? '空值' // 0
let result4 = value4 ?? '空值' // ''
1
2
3
4
5
6
7
2
3
4
5
6
7
# 可选链式运算符?.
当我们要访问一个复杂对象的深层属性时,如下:
let person = {
name: '张三',
address: {
street: '北京西路32号',
city: '北京',
state: 'BJ'
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
如果该数据为静态时就无需判断,但我们取到的数据多半为api返回的并不能完全保证数据的完整性,为避免出错我们会先依次判断该属性链上的属性是否存在,比如我需要取person.address.city时
if (person && person.address) {
// 安全使用person.address.city属性
}
1
2
3
2
3
这里可选链式运算符?.就排上用场了,可选链式运算符?. 可以用于链式调用,以便在访问嵌套对象的属性时,如果中间属性为空值(null或undefined),则可以终止链式调用并返回undefined。
const street = person.address?.street; // street = '123 Main St'
const zipCode = person.address?.zipCode; // zipCode = undefined
const country = person.address?.country?.name; // country = undefined
1
2
3
2
3
在上面的示例中,person.address?.street 返回了嵌套对象 person.address 的 street 属性的值。而 person.address?.zipCode 返回了 undefined,因为 person.address 对象没有 zipCode 属性。
可选链式运算符?. 可以帮助避免在访问嵌套对象属性时出现 TypeError,并提供了更安全的方式来处理可能为空值的情况。
上次更新: 2025/09/05, 8:09:00