本代码企图用缩进的方法说明 else 是对应 if (a == 1) 的,但是实际上,由于 else 与 if (b == 0) 最相近,本代码不能按作者的想法运行。正确的代码是
if (a == 1) {if (b == 0) alert(a+b);
} else {
alert(a-b);
}
提示 一行代码太长,或者涉及到比较复杂的嵌套,可以考虑用多行文本,如上例,if (a == 1) 后面没有立即写上语句,而是换一行再继续写。浏览器不会混淆的,当它们读完一行,发现是一句未完成语句,它们会继续往下读。使用缩进也是很好的习惯,当一些语句与上面的一两句语句有从属关系时,使用缩进能使程序更易读,方便程序员进行编写或修改工作。
循环体
本语句的作用是重复执行<语句>,直到<循环条件>为 false 为止。它是这样运作的:首先给<变量>赋<初始值>,然后*判断<循环条件>(应该是一个关于<变量>的条件表达式)是否成立,如果成立就执行<语句>,然后按<变量累加方法>对<变量>作累加,回到“*”处重复,如果不成立就退出循环。这叫做“for循环”。下面看看例子。
for (i = 1; i < 10; i++) document.write(i);本语句先给 i 赋初始值 1,然后执行 document.write(i)语句(作用是在文档中写 i 的值,请参越“对象化编程”一章);重复时 i++,也就是把 i 加 1;循环直到 i<10 不满足,也就是 i>=10 时结束。结果是在文档中输出了“123456789”。
和 if 语句一样,<语句>只能是一行语句,如果想用多条语句,你需要用语句块。
与其他语言不同,JavaScript 的 for 循环没有规定循环变量每次循环一定要加一或减一,<变量累加方法>可以是任意的赋值表达式,如 i+=3、i*=2、i-=j 等都成立。
提示 适当的使用 for 循环,能使 HTML 文档中大量的有规律重复的部分简化,也就是用 for 循环重复写一些 HTML 代码,达到提高网页下载速度的目的。不过请在 Netscape 中重复进行严格测试,保证通过了才好把网页传上去。作者曾试过多次因为用 for 循环向文档重复写 HTML 代码而导致 Netscape“猝死”。IE 中绝对没有这种事情发生,如果你的网也是只给 IE 看的,用多多的 for 也没问题。
除了 for 循环,JavaScript 还提供 while 循环。
比 for 循环简单,while 循环的作用是当满足<循环条件>时执行<语句>。while 循环的累加性质没有 for 循环强。<语句>也只能是一条语句,但是一般情况下都使用语句块,因为除了要重复执行某些语句之外,还需要一些能变动<循环条件>所涉及的变量的值的语句,否则一但踏入此循环,就会因为条件总是满足而一直困在循环里面,不能出来。这种情况,我们习惯称之为“死循环”。死循环会弄停当时正在运行的代码、正在下载的文档,和占用很大的内存,很可能造成死机,应该尽最大的努力避免。
break 和 continue
有时候在循环体内,需要立即跳出循环或跳过循环体内其余代码而进行下一次循环。break 和 continue 帮了我们大忙。
break;
本语句放在循环体内,作用是立即跳出循环。
continue;
本语句放在循环体内,作用是中止本次循环,并执行下一次循环。如果循环的条件已经不符合,就跳出循环。
例
if (i == 3 || i == 5 || i == 8) continue;
document.write(i);
}
输出:124679。
switch 语句
如果要把某些数据分类,例如,要把学生的成绩按优、良、中、差分类,我们可能会用 if 语句:
result = 'fail';
} else if (score < 80) {
result = 'pass';
} else if (score < 90) {
result = 'good';
} else if (score <= 100) {
result = 'excellent';
} else {
result = 'error';
}
看起来没有问题,但使用太多的 if 语句的话,程序看起来有点乱。switch 语句就是解决这种问题的最好方法。
switch (e) {case r1: (注意:冒号)
...
[break;]
case r2:
...
[break;]
...
[default:
...]
}
这一大段的作用是:计算 e 的值(e 为表达式),然后跟下边“case”后的 r1、r2……比较,当找到一个相等于 e 的值时,就执行该“case”后的语句,直到遇到 break 语句或 switch 段落结束(“}”)。如果没有一个值与 e 匹配,那么就执行“default:”后边的语句,如果没有 default 块,switch 语句结束。
上边的 if 段用 switch 改写就是:
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
result = 'fail';
break;
case 6:
case 7:
result = 'pass';
break;
case 8:
result = 'good';
break;
case 9:
result = 'excellent';
break;
default:
if (score == 100)
result = 'excellent';
else
result = 'error';
}
其中 parseInt()方法是以后会介绍的,作用是取整。最后 default 段用的 if 语句,是为了不把 100 分当错误论(parseInt(100 / 10) == 10)。