||理论与差异 和 ??
What is Nullish coalescing – ??
Nullish 合并使我们能够为值是
或时指定回退。null
undefined
你可能写过这样的代码:
let employeeSalaryFromDb; const salary = employeeSalaryFromDb || 1000;
我们只是检查employeeSalaryFromDb
值是否为truthy
,如果是我们短路并将该值分配给 salary 变量。
如果employeeSalaryFromDb
是,我们将运算符falsy
右边的值
赋给变量。||
salary
在打字稿中你可以这样做:
let employeeSalaryFromDb; const salary = employeeSalaryFromDb ?? 1000;
在这种情况下,我们检查是否employeeSalaryFromDb
是null
,或者- 如果是 – 我们将运算符undefined
右侧的值分配给
变量。??
salary
在任何其他情况下 – 我们短路并将值分配给
employeeSalaryFromDb
变量salary
。
您可以看到||
和??
运算符有何细微差别。
在这种情况下||
– 如果我们falsy
在运算符左侧有任何值 – 则返回运算符右侧的值。
对于??
– 如果我们在运算符左侧有一个null
orundefined
值 – 则返回运算符右侧的值。其中不包括, ,falsy
等值。''
NaN
0
||
– if (falsy) {返回运算符右边的值}
// a is false const a = '' || false;
||
– if (truthy) {返回真值}
// b is 'hello' const b = 'hello' || 'world';
??
– if (null || undefined) {返回运算符右边的值}
let c; // logs 'hello' console.log(c ?? 'hello'); const d = null; // logs 'hello' console.log(d ?? 'hello');
??
– if (falsy && !(null || undefined)) {return falsy value}
const e = 0; // logs 0 console.log(e ?? 'hello');
??
– if (truthy) {返回真值}
// logs 'hi' console.log('hi' ?? 'world');
结束
该??
运算符比||
运算符更具体,因为它仅在左侧值为null
或
时才评估右侧的内容undefined
。有时运算符对or
值||
有意想不到的行为,这些值是虚假的。所以你可以有类似的东西:0
NaN
const quantity = 0; // logs 'specify quantity' even tho we have already done that console.log(quantity || 'specify quantity');
该工作的正确操作员是??
:
const quantity = 0; // logs 0 console.log(quantity ?? 'specify quantity');
截至 2021 年 2 月 26 日,??
约 85.68% 的浏览器支持运营商 – caniuse.com。