&&&和?之间的区别?在 JavaScript 中



我正在尝试使用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运算符&&检查包括包含""0falsenullundefined的伪值

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

相关内容

  • 没有找到相关文章

最新更新