逻辑运算符

  • 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 的值。

  • || 返回第一个 值。?? 返回第一个 已定义的 值。|| 无法区分 false0、空字符串 ""null/undefined。它们都一样 —— 假值(falsy values)。如果其中任何一个是 || 的第一个参数,那么我们将得到第二个参数作为结果。

  • ?? 运算符的优先级与 || 相同,,它们的优先级都为 3

  • ?? 运算符的优先级非常低,仅略高于 ?=,因此在表达式中使用它时请考虑添加括号。如果没有明确添加括号,不能将其与 ||&& 一起使用。


<
Previous Post
1205 Back to HTML5 after a month and gave up
>
Next Post
1208 Did a lot of things, just not work