先定义操作符(??)(缺值合并)
本文最后更新于:21 分钟前
先定义操作符(??
)(缺值合并)
先定义(first-defined)操作符**??**
求值其先定义的操作数,如果其左操作数不是null或undefined,就返回该值。否则,它会返回右操作数的值。
与&&
或||
操作符类似,??
是短路的:它只在第一个操作数求值为null或undefined时才会求值第二个操作数。
如果表达式a没有副效应,那么表达式a ?? b
等价于:
1 |
|
??
是对||
的一个有用的替代,适合选择先定义的操作数,而不是第一个为真值的操作数。尽管||
名义上是个逻辑或操作符,习惯上也会使用它选择第一个非假值操作数,比如:
1 |
|
这种习惯用法的问题在于,0、空字符串和false都是假值,但这些值在某些情况下是完全有效的。对上面的代码示例来说,maxWidth
如果等于0,该值就会被忽略。如果我们把||
操作符改为??
,那么对这个表达式来说,0也会成为有效的值
1 |
|
其中??
的第一个操作数都是假值。如果这个操作数是假值但有定义,??
仍然返回这个值。只有当第一个操作数“缺值”(nullish)时(即null或undefined),这个操作符才会求值并返回第二个操作数:
1 |
|
注意,如果我们使用||而不是??,这里的timeout、title和verbose表达式会求值为不同的结果。
??
操作符与&&
和||
操作符类似,但优先级并不比它们更高或更低。如果表达式中混用了??
和它们中的任何一个,必须使用圆括号说明先执行哪个操作:
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!