条件代码
有时候一块代码只有在一定条件下才能运行。流程控制--通过if 和else 块--让你在一定条件满足的情况下运行代码。
// Flow control
var foo = true;
var bar = false;
if ( bar ) {
// this code will never run
console.log( "hello!" );
}
if ( bar ) {
// this code won't run
} else {
if ( foo ) {
// this code will run
} else {
// this code would run if foo and bar were both false
}
}
虽然没有严格要求单行if语句周围的花括号, 一贯使用它们,即使它们没有严格要求,这使得大大代码更易读。 记住在单独的if/else语句块中,不要多次定义同名的功能,这样不会达到预期的效果。
真值和假值(的事情)
为了成功使用流程控制,理解什么样的值是真值,什么样的值是假值,是非常重要的。有时候看起来有些值可以用这种方法评估,实际上用了别的方法。
// Values that evaluate to true
"0";
"any string";
[]; // an empty array
{}; // an empty object
1; // any non-zero number
// Values that evaluate to false
""; // an empty string
NaN; // JavaScript's "not-a-number" variable
null;
undefined; // be careful -- undefined can be redefined!
0; // the number zero
三元运算符的条件变量赋值
有时候变量的设置依赖于某些条件。一个if/else语句也能工作,但在很多情况下,三元运算符显得更方便。三元运算符测试一个条件:当条件为真时返回某个值,否则返回另一个值。
三元运算符:
// set foo to 1 if bar is true;
// otherwise, set foo to 0
var foo = bar ? 1 : 0;
然而三元运算符可以不用把返回值赋给一个变量,但不鼓励这样做。
开关语句
相比使用if/else语句块,有些情况下使用开关语句更有用。开关语句探测变量的值或表达式,根据值运行不同的语句块。
// A switch statement
switch ( foo ) {
case "bar":
alert( "the value was bar -- yay!" );
break;
case "baz":
alert( "boo baz :(" );
break;
default:
alert( "everything else is just ok" );
}
在javascript中开关语句地位有所下降, 因为相同的行为往往可以通过创建一个对象,它具有更多的潜在重用或测试功能。
var stuffToDo = {
"bar": function() {
alert( "the value was bar -- yay!" );
},
"baz": function() {
alert( "boo baz :(" );
},
"default": function() {
alert( "everything else is just ok" );
}
};
if ( stuffToDo[ foo ] ) {
stuffToDo[ foo ]();
} else {
stuffToDo["default"]();
}
对象在 类型和 对象部分中进一步涵盖。