js中 ??双问号操作符-空值合并运算符 和|| 运算符号的区别——除了 undefined 和 null的其它虚值,?? 不会返回默认值
typescript ?? 双问号
const i = undefined
const k = i ?? 6
console.log(k) // => 6
1、|| 运算符号
基本只有在实际值undefined
或为null
时才应使用默认值,这是有效的,因为undefined
和null
都是假(虚值)的:
undefined || 'default' // 'default'
null || 'default' // 'default'
//如果实际值是其他的虚值,也会使用默认值
false || 'default' // 'default'
'' || 'default' // 'default'
0 || 'default' // 'default'
2、双问号操作符-解决 || 运算的问题
对于undefined
和null
, ??
操作符的工作原理与||
操作符相同;如果给定变量值为 null
或者 undefined
,则使用双问号后的默认值,否则使用该变量值。
undefined ?? 'default' //'default'
null ?? 'default' //'default'
//除了 undefined 和 null的其它虚值,?? 不会返回默认值。
false ?? 'default' // false
'' ?? 'default' // ''
0 ?? 'default' // 0
??
主要是用来解决 ||
操作符号的一些问题,以下两个表达式是等价的:
a ?? b
a !== undefined && a !== null ? a : b
默认值是这样提供的:
实例
当左侧操作数为 null 或 undefined 时,其返回右侧的操作数,否则返回左侧的操作数。
const foo = null ?? 'default string';
等价于编译后的JavaScript代码:
var _a;
var foo = (_a = null) !== null && _a !== void 0 ? _a : 'default string';
可见,这个例子,foo必定为default string, 因为编译后的JavaScript代码里,已经能看到null被显式地赋给_a了。
空值合并运算符的短路用法:当空值合并运算符的左表达式不为 null 或 undefined 时,不会对右表达式进行求值。