文章为《JavaScript高级程序设计》(第三版)笔记。
本小节包括:
- 1.if语句
- 2.do-while语句
- 3.while语句
- 4.for语句
- 5.for-in语句
- 6.label语句
- 7.break和continue语句
- 8.with语句
- 9.switch语句
- 10.函数
1.if 语句
2.do-while 语句
是一种后测试循环语句。在对条件表达式求值之前,循环体内的代码至少会被执行一次。
do {
statement
} while (expression)
3.while 语句
属于前测试循环语句。
4.for 语句
前测试循环语句。
5.for-in 语句
可以用来枚举对象。通过for-in循环输出的属性名的顺序是不可预测的,返回的先后次序可能会因为浏览器而异。
注意:如果要迭代的对象的变量值为null或undefined,for-in语句会抛出错误。ES5更正了这一行为,对这种情况不在抛出错误,而只是不执行循环体。为了保证最大限度的兼容性,建议在使用for-in循环之前,先检测确认该对象的值是不是nulll或undefined。
6.label 语句
使用label语句可以在代码中添加标签,以便将来使用。
label: statement
例子:
start: for (var i = 0; i < count; i++) {
alert(i)
}
例子中定义的 start 标签可以在将来由break或continue语句引用。加标签的语句一般都要与for语句等循环语句配合使用。
7.break 和 continue 语句
break我们都知道是用来退出循环,而continue语句虽然也是退出循环,但退出循环后会从循环的顶部继续执行。
for (var i=1; i<10; i++) {
if (i % 5 === 0) {
continue;
}
num++;
}
alert(num); // 8
如果这里是break的话,输出的值应该是4。这里输出的是8,是因为当i为5时,跳出了本次循环,也就不执行num++,而是开始执行i等于6的循环。
break和continue语句都可以与label语句联合使用。这种联合使用的情况多发生在循环嵌套的情况下
var num = 0;
outermost:
for (var i=0; i<10; i++) {
for (var j=0; j<10; j++) {
if (i === 5 && j === 5) {
break outermost;
}
num++;
}
}
alert(num); // 55
添加这个标签的结果将导致break语句不仅会退出内部的for语句(即使用变量j的循环),而且也会退出外部的for语句(即使用变量i的循环)。如果这里用的是continue语句的话,则会退出内部循环,执行外部循环。
8.with 语句
利用with语句可以简化多次编写同一个对象的工作。
var hostName = location.hostname;
var url = location.href;
使用with语句改写
with(location) {
var hostName = hostname;
var url = href;
}
注意,严格模式下不许使用with语句,而且有一定的性能问题。
9.switch 语句
switch也是我们常用的一个语句。switch语句在比较时使用的是全等操作符,因此不会发生类型转换。
这里有个有趣的例子:
var num = 25;
switch (true) {
case num < 0:
alert('Less than 0.');
break;
case num >= 0 && num <= 10:
alert('Between 0 and 10.');
break;
case num > 10 && num <= 20:
alert('Between 10 and 20.');
break;
default:
alert('More than 20.');
}
最终结果为 “More than 20.”。这里之所以可以给 switch 语句传递表达式 true ,是因为每个 case 值都可以返回一个布尔值。
10.函数
ECMAScript 函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型。
在函数体内可以通过 arguments 对象来访问这个参数数组,从而获取传递给函数的每一个参数。
注意,arguments 对象只是与数组类似(它并不是 Array 的实例)
function sayHi() {
console.log('Hello ' + arguments[0] + ', length:' + arguments.length);
}
sayHi('a', 'b') // Hello a, length:2