我正在尝试使用Logical AND&&
和Nullish合并运算符??
运算符对变量/值进行条件呈现。但出于某种原因,我不清楚这两种运算符的用法以及它们是如何工作的。
请解释这两者之间的区别,以及我们何时应该使用其中任何一个而不是if
语句。
/* -------------------- ?? operator -------------------- */
const foo = null ?? '?? default string';
console.log(foo);
const baz = 0 ?? 10;
console.log(baz);
/* -------------------- && operator -------------------- */
const foo_1 = null && '&& default string';
console.log(foo_1);
const baz_1 = 0 && 20;
console.log(baz_1);
要查看差异并确定何时使用一个或另一个运算符,可以制作这样的表:
| || | && | ?? |
--------------------+---------+---------+---------+
0, 'default' |'default'| 0 | 0 |
'', 'default' |'default'| '' | '' |
false, 'default' |'default'| false | false |
null, 'default' |'default'| null |'default'|
undefined, 'default' |'default'|undefined|'default'|
true, 'default' | true |'default'| true |
20, 'default' | 20 |'default'| 20 |
amp&-表示与。
??-当左侧表达式为null或未定义时,只返回右侧表达式的运算符。
例如
if(someValue && otherValue) {
//if someValue is true AND otherValue is true
}
也称为零合并运算符。它是一个运算符,当左侧表达式为null或未定义时,它只返回右侧表达式。
let foo = someValue ?? "default value";
// when someValue is null assing default (right hand) value to variable foo.
空合并运算符??
区分空值(空,未定义(,其中OR运算符||
或AND运算符&&
检查包括包含""
0
false
null
undefined
的伪值
var x = '';
console.log(x ?? "default"); // ''
console.log(true && x); // ''
var y; // undefined
console.log(y ?? "default"); // 'default'
console.log(true && y); // undefined
文档中的第一条语句对于代码中的前两条语句应该是不言自明的:
零合并运算符(??(是一种逻辑运算符,当其左侧操作数为null或未定义时,它返回右侧操作数,否则返回左侧操作数。
关于,&&
:只有当第一个表达式为truthy时,才会检查AND(&&(之后的第二个表达式,然后返回第二个。否则,将返回第一个表达式。
const foo_1 = null && '&& default string';
console.log(foo_1);
const baz_1 = 0 && 20;
console.log(baz_1);
const baz_2 = 20 && 30;
console.log(baz_2);
??当其左侧操作数为null或未定义时,返回其右侧操作数
const emptyString = ""
const nullValue = null
const valA = emptyString ?? "valA" // ""
const valB = nullValue ?? "valB" // "ValB"
const valC = emptyString && "valC" // ""
const valD = nullValue && "valD" // null