JavaScript 条件判断 if
条件判断:IF,'?'
有时,我们需要根据不同的条件执行不同的操作。
为此,我们可以使用if语句和条件运算符?,也称为“问号”运算符。
“IF”语句
该if(...)语句计算括号中的条件,如果结果为true,则执行代码块。
例如:
<!DOCTYPE HTML> <html> <body> <script> let year = prompt('请输入今年是哪一年?', ''); if (year == 2021) alert( '你答对了!' ); </script> </body> </html>
在上面的示例中,条件是一个简单的相等性检查 ( year == 2021),当你输入值是2021时弹出一个答对的提示,但它可以复杂得多,比如搭错了怎么处理,再比如答对以后做更多的操作。
如果我们想执行多个语句,我们必须将我们的代码块括在花括号中:
if (year == 2021) { alert( "That's correct!" ); alert( "You're so smart!" ); }
我们建议{}每次使用if语句时都用花括号括起代码块,即使只有一个语句要执行。这样做可以提高可读性。
布尔转换
该if (…)语句计算括号中的表达式并将结果转换为布尔值。
让我们回忆一下类型转换一章中的转换规则:
一个数字0,一个空字符串"",null,undefined,和NaN一切变得false。因此,它们被称为“假”值。
其他值变为true,因此称为“真实”。
所以,这种情况下的代码永远不会执行:
if (0) { // 0 is falsy ... } ……
在这种情况下——它总是会:
if (1) { // 1 is truthy ... }
我们还可以将预先评估的布尔值传递给if,如下所示:
let cond = (year == 2021); // equality evaluates to true or false if (cond) { ... }
其他“else”
该if语句可能包含一个可选的“else”块。它在条件为假时执行。
例如:
let year = prompt('In which year was the ECMAScript-2015 specification published?', ''); if (year == 2021) { alert( 'You guessed it right!' ); } else { alert( 'How can you be so wrong?' ); // any value except 2021 }
几个条件:“else if”
有时,我们想测试一个条件的几个变体。该else if条款让我们这样做。
例如:
let year = prompt('In which year was the ECMAScript-2015 specification published?', ''); if (year < 2021) { alert( 'Too early...' ); } else if (year > 2021) { alert( 'Too late' ); } else { alert( 'Exactly!' ); }
在上面的代码中,JavaScript 首先检查year < 2021. 如果为假,则进入下一个条件year > 2021。如果这也是假的,它会显示最后一个alert.
可以有更多else if块。最后else是可选的。
条件运算符 '?'
有时,我们需要根据条件分配一个变量。
例如:
let accessAllowed; let age = prompt('How old are you?', ''); if (age > 18) { accessAllowed = true; } else { accessAllowed = false; } alert(accessAllowed);
所谓的“条件”或“问号”运算符让我们能够以更短更简单的方式做到这一点。
运算符由问号表示?。有时它被称为“三元”“三目运算符”,因为运算符具有三个操作数。它实际上是 JavaScript 中唯一一个拥有这么多运算符的运算符。
语法是:
let result = condition ? value1 : value2;
该condition评估:如果它为true返回value1,否则返回 value2。
例如:
let accessAllowed = (age > 18) ? true : false;
从技术上讲,我们可以省略 周围的括号age > 18。问号运算符的优先级较低,因此在比较之后执行>。
此示例将执行与上一个相同的操作:
// the comparison operator "age > 18" executes first anyway // (no need to wrap it into parentheses) let accessAllowed = age > 18 ? true : false;
但是括号使代码更具可读性,因此我们建议使用它们。
请注意:
在上面的示例中,您可以避免使用问号运算符,因为比较本身返回true/false:
// the same let accessAllowed = age > 18;
多 '?' 嵌套使用
一系列问号运算符?可以返回一个取决于多个条件的值。
例如:
let age = prompt('age?', 18); let message = (age < 3) ? 'Hi, baby!' : (age < 18) ? 'Hello!' : (age < 100) ? 'Greetings!' : 'What an unusual age!'; alert( message );
一开始可能很难理解发生了什么。但仔细观察后,我们可以看到这只是一个普通的测试序列:
第一个问号检查是否age < 3.
如果为真 - 它返回'Hi, baby!'。否则,它将继续到冒号 '":"' 之后的表达式,检查age < 18.
如果这是真的 - 它返回'Hello!'. 否则,它将继续到下一个冒号 '":"' 之后的表达式,检查age < 100.
如果这是真的 - 它返回'Greetings!'. 否则,它将继续到最后一个冒号 '":"' 之后的表达式,返回'What an unusual age!'.
使用if..else表达是下面这个样子:
if (age < 3) { message = 'Hi, baby!'; } else if (age < 18) { message = 'Hello!'; } else if (age < 100) { message = 'Greetings!'; } else { message = 'What an unusual age!'; }
'?' 的非传统用法
有时问号?用作替代if:
let company = prompt('Which company created JavaScript?', ''); (company == 'Netscape') ? alert('Right!') : alert('Wrong.');
根据条件company == 'Netscape',?执行后的第一个或第二个表达式并显示警报。
此处我们不将结果分配给变量。相反,我们根据条件执行不同的代码。
不建议以这种方式使用问号运算符。
该符号比等效的if语句短,这对一些程序员很有吸引力。但它的可读性较差。
这是if用于比较的相同代码:
let company = prompt('Which company created JavaScript?', ''); if (company == 'Netscape') { alert('Right!'); } else { alert('Wrong.'); }
我们的眼睛垂直扫描代码。跨越多行的代码块比长的水平指令集更容易理解。
问号运算符的目的?是根据其条件返回一个或另一个值,这种情况下可以使用它。如果需要执行不同的代码分支的情况下使用if。