3.3.4 do/while循环

还有另一种不那么常见的循环类型,叫做do/while循环。这种类型的循环基本上和while循环相同,它的基本结构如下所示:


do{

//javascript to repeat

}while(condition);


在这种循环中,条件测试发生在末尾,即在循环运行之后。因此,花括号中的JavaScript代码总是至少运行一次。即便条件不为true,也只有在代码运行一次之后才会进行测试。

可以使用这种循环的情况并不太多,但是,当想要提示用户输入的时候,它非常有用。我们在本章前面(3.2节中的教程)见到的教程是一个很好的例子。那段脚本要求访问者输入一个数值。它包含了一个失效预防系统,因此,如果访问者没有输入一个数值,脚本要求他们再次输入一个数值。遗憾的是,如果某人真的很顽固并且再次输入数值以外的内容,就会在页面上显示一条无意义的消息。

然而,有了do/while循环,就可以继续提示访问者输入一个数值,直到他确实输入了一个数值。为了看看如何做到这一点,我们将编辑在3.2节的教程中完成的页面:

1.在文本编辑器中打开在3.2节的教程中完成的页面conditional.html。

(如果你没有完成该教程,可以直接打开文件complete_conditional.html)。我们将使用一个do/while循环来替代靠近页面顶部的代码。

2.找到页面的<head>部分的<script>标签之间的代码,并且删除如下粗体所示的代码:


var luckyNumber=prompt('What is your lucky number?’,’');

luckyNumber=parseInt(luckyNumber,10);

if(isNaN(luckyNumber)){

luckyNumber=prompt('Please, tell me your lucky number.’,’');

}


删除的代码提供了第二个提示对话框。我们不再需要这些代码。相反,把剩下的代码包含到一个do/while循环中。

3.把光标放到代码的第一行(以var luckyNumber开始的一行)并输入:


do{


这行代码创建了循环的开头。接下来将完成循环并添加测试条件。

4.单击这段JavaScript代码的最后一行,并且输入:}while(isNaN(luckyNumber));。完整的代码段如下所示:


do{

var luckyNumber=prompt('What is your lucky number?’,’');

luckyNumber=parseInt(luckyNumber,10);

}while(isNaN(luckyNumber));


保存文件并在Web浏览器中预览。尝试在提示框中输入文本和其他的非数字符号。这个恼人的对话框持续出现,直到你真正地输入了一个数字。

它是这么工作的:do关键字告诉JavaScript解释器,让它准备进入一个do/while循环。下面的两行代码随后运行,因此,提示框出现并且将访问者的回答转换成一个整数。只有此时才进行条件测试。这和3.2节教程的脚本中的条件相同:它只是检查从访问者那里获取的输入是否“非数值”。如果输入不是一个数值,循环重复。换句话说,只要输入的是非数值,提示继续出现。这种方法的好处是,它保证了提示框至少出现一次,因此,如果访问者确实输入了一个数值作为问题的回答,就没有循环。在Chapter03文件夹的complete_do-while.html中可以看到一个完整有效的教程。