添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

条件分支:if 和 '?'

有时我们需要根据不同条件执行不同的操作。

我们可以使用 if 语句和条件运算符 ? (也称为“问号”运算符)来实现。

“if” 语句

if(...) 语句计算括号里的条件表达式,如果计算结果是 true ,就会执行对应的代码块。

建议每次使用 if 语句都用大括号 {} 来包装代码块,即使只有一条语句。这样可以提高代码可读性。

布尔转换

if (…) 语句会计算圆括号内的表达式,并将计算结果转换为布尔型。

让我们回顾一下 类型转换 一章中的转换规则:

  • 数字 0 、空字符串 "" null undefined NaN 都会被转换成 false 。因为它们被称为“假值(falsy)”。
  • 其他值被转换为 true ,所以它们被称为“真值(truthy)”。
  • 所以,下面这个条件下的代码永远不会执行:

    let year = prompt('In which year was ECMAScript-2015 specification published?', '');
    if (year == 2015) {
      alert( 'You guessed it right!' );
    } else {
      alert( 'How can you be so wrong?' ); // 2015 以外的任何值
          

    多个条件:“else if”

    有时我们需要测试一个条件的几个变体。我们可以通过使用 else if 子句实现。

    let year = prompt('In which year was ECMAScript-2015 specification published?', '');
    if (year < 2015) {
      alert( 'Too early...' );
    } else if (year > 2015) {
      alert( 'Too late' );
    } else {
      alert( 'Exactly!' );
          

    在上面的代码中,JavaScript 先检查 year < 2015 。如果条件不符合,就会转到下一个条件 year > 2015 。如果这个条件也不符合,则会显示最后一个 alert

    可以有更多的 else if 块。结尾的 else 是可选的。

    条件运算符 ‘?’

    有时我们需要根据一个条件去赋值一个变量。

    如下所示:

    所谓的“条件”或“问号”运算符让我们可以更简短地达到目的。

    这个运算符通过问号 ? 表示。有时它被称为三元运算符,被称为“三元”是因为该运算符中有三个操作数。实际上它是 JavaScript 中唯一一个有这么多操作数的运算符。

  • 第一个问号检查 age < 3
  • 如果为真 — 返回 'Hi, baby!' 。否则,会继续执行冒号 ":" 后的表达式,检查 age < 18
  • 如果为真 — 返回 'Hello!' 。否则,会继续执行下一个冒号 ":" 后的表达式,检查 age < 100
  • 如果为真 — 返回 'Greetings!' 。否则,会继续执行最后一个冒号 ":" 后面的表达式,返回 'What an unusual age!'
  • 这是使用 if..else 实现上面的逻辑的写法:

    根据条件 company =='Netscape' ,要么执行 ? 后面的第一个表达式并显示对应内容,要么执行第二个表达式并显示对应内容。

    在这里我们不是把结果赋值给变量。而是根据条件执行不同的代码。

    不建议这样使用问号运算符。

    这种写法比 if 语句更短,对一些程序员很有吸引力。但它的可读性差。

    下面是使用 if 语句实现相同功能的代码,进行下比较:

    let company = prompt('Which company created JavaScript?', '');
    if (company == 'Netscape') {
      alert('Right!');
    } else {
      alert('Wrong.');
          

    因为我们的眼睛垂直扫描代码。所以,跨越几行的代码块比长而水平的代码更易于理解。

    问号 ? 的作用是根据条件返回其中一个值。请正确使用它。当需要执行不同的代码分支时,请使用 if

    let message = (login == 'Employee') ? 'Hello' :
      (login == 'Director') ? 'Greetings' :