1208 The Modern JavaScript Tutorial — Logical operators, nullish coalescing operator
逻辑运算符
-
JavaScript 中有四个逻辑运算符:
||(或),&&(与),!(非),??(空值合并运算符)。 - 或运算寻找第一个真值
- 一个或运算
||的链,将返回第一个真值,如果不存在真值,就返回该链的最后一个值。- 从左到右依次计算操作数。
- 处理每一个操作数时,都将其转化为布尔值。如果结果是
true,就停止计算,返回这个操作数的初始值。 - 如果所有的操作数都被计算过(也就是,转换结果都是
false),则返回最后一个操作数。
- 一个或运算
- 与运算寻找第一个假值
- 与运算返回第一个假值,如果没有假值就返回最后一个值。
- 从左到右依次计算操作数。
- 在处理每一个操作数时,都将其转化为布尔值。如果结果是
false,就停止计算,并返回这个操作数的初始值。 - 如果所有的操作数都被计算过(例如都是真值),则返回最后一个操作数。
- 与运算返回第一个假值,如果没有假值就返回最后一个值。
- 与运算
&&的优先级比或运算||要高。 - 非运算符
!的优先级在所有逻辑运算符里面最高,所以它总是在&&和||之前执行。
let userName = prompt("Who's there?", '');
if (userName === 'Admin') {
let pass = prompt('Password?', '');
if (pass === 'TheMaster') {
alert( 'Welcome!' );
} else if (pass === '' || pass === null) {
alert( 'Canceled' );
} else {
alert( 'Wrong password' );
}
} else if (userName === '' || userName === null) {
alert( 'Canceled' );
} else {
alert( "I don't know you" );
}
空值合并运算符 ‘??’
-
空值合并运算符(nullish coalescing operator)的写法为两个问号
??。 -
a ?? b的结果是:
如果a是已定义的,则结果为a,
如果a不是已定义的,则结果为b。
换句话说,如果第一个参数不是null/undefined,则??返回第一个参数。否则,返回第二个参数。 -
??的常见使用场景是提供默认值。 -
可以使用
??序列从一系列的值中选择出第一个非null/undefined的值。 -
||返回第一个 真 值。??返回第一个 已定义的 值。||无法区分false、0、空字符串""和null/undefined。它们都一样 —— 假值(falsy values)。如果其中任何一个是||的第一个参数,那么我们将得到第二个参数作为结果。 -
??运算符的优先级与||相同,,它们的优先级都为3。 -
??运算符的优先级非常低,仅略高于?和=,因此在表达式中使用它时请考虑添加括号。如果没有明确添加括号,不能将其与||或&&一起使用。