JavaScript 提供if
结构和switch
结构,完成条件判断,即只有满足预设的条件,才会执行相应的语句。
if
结构先判断一个表达式的布尔值,然后根据布尔值的真伪,执行不同的语句。
if (布尔值)
语句;
// 或者
if (布尔值) 语句;
“布尔值”往往由一个条件表达式产生的,必须放在圆括号中,表示对表达式求值。
if (m === 3)
m = m + 1;
这种写法要求条件表达式后面只能有一个语句
。如果想执行多个语句,必须在if
的条件判断之后,加上大括号,表示代码块(多条语句合并成一条语句)
建议总是在if
语句中使用大括号,因为这样方便插入语句。
if (…) 语句会计算圆括号内的表达式,并将计算结果转换为布尔型(Boolean)。
false
。
var x = 2;
var y = 0;
if (x = y) {
console.log("aaa");
}
// aaa
上面代码的原意是,当x
等于y
的时候,才执行相关语句。但是,不小心将严格相等运算符写成赋值表达式,结果变成了将y
赋值给变量x
,再判断变量x
的值(等于2)的布尔值(结果为true
)。
if
代码块后面,还可以跟一个else
代码块,表示不满足条件时,所要执行的代码。
if (m === 3) {
// 满足条件时,执行的语句
} else {
// 不满足条件时,执行的语句
}
对同一个变量进行多次判断时,多个if...else
语句可以连写在一起。
if (m === 0) {
// ...
} else if (m === 1) {
// ...
} else if (m === 2) {
// ...
} else {
// ...
}
else
代码块总是与离自己最近的那个if
语句配对。
var m = 1;
var n = 2;
if (m !== 1)
if (n === 2) console.log('hello');
else console.log('world');
// 相当于
if (m !== 1) {
if (n === 2) {
console.log('hello');
} else {
console.log('world');
}
}
多个if...else
连在一起使用的时候,可以转为使用更方便的switch
结构
与if语句不同的是,switch语句只能做值的相等判断
(使用全等运算符 ===
),而if语句可以做值的范围判断
,这意味着比较时不会发生类型转换;
switch的语法:
switch (fruit) {
case "banana":
// ...
break;
case "apple":
// ...
break;
default:
// ...
}
switch
语句部分和case
语句部分,都可以使用表达式。
switch (1 + 3) {
case 2 + 2:
f();
break;
default:
neverHappens();
}
JavaScript 还有一个三元运算符(即该运算符需要三个运算子)?:
,也可以用于逻辑判断。
(条件) ? 表达式1 : 表达式2
这个三元运算符可以被视为if...else...
的简写形式,因此可以用于多种场合。
var myVar;
console.log(
myVar ?
'myVar has a value' :
'myVar does not have a value'
)
// myVar does not have a value
逻辑运算符,主要是由三个:
||
(或),&&
(与),!
(非)多个表达式或者值
放到一起来获取到一个最终的结果;有了逻辑运算符,我们就可以在判断语句中编写多个
条件。
||
(或)两个竖线符号表示“或”运算符(也称为短路或):
注意:返回的值是操作数的初始形式,不会转换为Boolean类型。
var a = 10;
var b = 20;
var c = a || b;// 10
换句话说,一个或运算 || 的链,将返回第一个真值,如果不存在真值,就返回该链的最后一个值。
var x = 1;
true || (x = 2) // true
x // 1
&&
(或)两个竖线符号表示“与”运算符(也称为短路与):
true && 'foo' && '' && 4 && 'foo' && true
// ''
1 && 2 && 3
// 3
换句话说,与运算 返回第一个假值,如果没有假值就返回最后一个值。
if (i) {
doSomething();
}
// 等价于
i && doSomething();
逻辑非运算符接受一个
参数,并按如下运算:
返回相反的值
;两个非运算 !!
有时候用来将某个值转化为布尔类型:
var a = 10;
var b = !!a;//true