空值合并运算符(??)
空值合并运算符:??
空值合并操作符(??) 是一种逻辑操作符,当左侧的操作数为 ==null== 或者 == undefined== 时,返回右侧操作数,否则返回左侧操作数。在JavaScript中的真值和假值 在我们研究 ?? 操作符之前,我们先来回顾JavaScript的值要么是真值要么是假值:当需要强制转换成Boolean的时候,一个值要么是true 要么是false。在JavaScript里,下面的值被认为是假值:
- false
- 0
- -0
- 0n
- NaN
- “”
- null
- undefined
用 ?? 提供默认值 当一个值是null或者undefined的时候?? 操作符可以提供一个默认值。它需要两个操作数:
value ?? fallbackValue;
如果左操作的结果是 null或undefined,?? 表达式会使用右操作的结果
null ?? "n/a";
// "n/a"undefined ?? "n/a";
// "n/a"
如果左操作不是 null或undefined,都是使用左操作
false ?? true;
// false0 ?? 100;
// 0NaN ?? 0;
// NaN
以上所有的左侧操作数都是“假值”,但是 ??中还是得到左侧操作数。
【空值合并运算符(??)】如果我们使用 || (逻辑或运算符) 代替 ??, 以上所有的表达式都会使用右侧操作数。
false || true;
// true0 || 100;
// 100NaN ?? 0;
// 0
以上的结果差异就是为什么不能用|| 给nullabled值提供一个默认值。 结果可能和我们想要的不一样。
type Options = {
prettyPrint?: boolean;
}function serializeJSON(value: unknown, options: Options): string {
const prettyPrint = options.prettyPrint ?? true;
// ...
}
表达式 options.perttyPrint ?? true 是在perttyPrint的值是null或undefined的时候,提供一个默认值true。 如果perttyPrint的值是false,即 false ?? true 得到的结果是false,这是我们想要的结果。
如果这里的 ?? 换成 ||,结果就不是我们预期的。 当perttyPrint的值是null或undefined的时候 最终表达式结果为true,这是符合预期的。 如果perttyPrint的值是false,false || true 仍然得到true,这不是我们想要的结果。所以这种情况下,必须使用 ??.
推荐阅读
- Shell-Bash变量与运算符
- 如何将多个小分子文件合并为单个
- 二、Dart基础语法|二、Dart基础语法 (二)运算符 类
- JAVA|JAVA 最好用的大文件切割与合并
- Python实用技法第33篇(字符串连接及合并)
- 两个已排序数组的合并
- git|git 合并两个远程分支
- Leetcode数组easy|Leetcode数组easy | 88. 合并两个有序数组
- JavaScript其他运算符
- C++运算符重载的方法详细解析