Microsoft(R) JScript(R) 控制程序的流程 |
JScript 教程 上一页 下一页 |
经常需要脚本在不同的条件下完成不同的事情。例如,您可以编写一个每小时检查时间的脚本,并在这一天中适当地更改某些参数。您也可以编写一个可以接收某种输入并采取相应操作的脚本。或者可以编写一个重复指定操作的脚本。您可以测试若干种条件。Microsoft JScript 中所有的条件测试结果都是 Boolean 值,因此任何测试的结果是 true 或 false。您可以自由地测试 Boolean 类型、数值类型或字符串类型的值。
JScript 提供了用于各种可能性的控制结构。最简单的控制结构是条件语句。
JScript 支持 if 和 if...else 条件语句。在 if 语句中将测试一个条件,如果该条件满足测试,就将执行所编写的 JScript 编码。(在 if...else 语句中,如果条件不满足测试,则将执行不同的代码。)最简单的 if 语句格式可以在一行中写完,不过更常见的是多行的 if 和 if...else 语句。下述示例演示了使用 if 和 if...else 语句的各种可能的语法。第一个示例演示了最简单的 Boolean 测试。当(且仅当)括号之间的项的值为 true 时,if 后续的语句或语句块才会被执行。
// smash() 函数是在该代码的其他地方定义的。 if (newShip) smash(champagneBottle,bow); // Boolean 测试,看 newShip 是否为真。 // 在本示例中,除非两个条件都为真,否则该测试将不会被满足。 if (rind.color == "deep yellow " && rind.texture == "large and small wrinkles") { theResponse = ("Is it a Crenshaw melon? <br> "); } // 在本示例中,只要任何一个条件为真,则测试即会满足。 var theReaction = ""; if ((lbsWeight > 15) || (lbsWeight > 45)) { theReaction = ("Oh, what a cute kitty! <br>"); } else theReaction = ("That's one huge cat you've got there! <br>");
JScript 也支持隐式的条件格式。该格式在要测试的条件后使用一个问号(而不是在条件前的 if ),并指定两个可选项,一个在满足条件时使用,另一个在条件不满足时使用。两个选择项之间用一个冒号隔开。var hours = ""; // 下面的代码指定 hours 是包含 theHour 的内容, // 还是包含 theHour - 12 的内容。 hours += (theHour >= 12) ? " PM" : " AM";
提示 如果要一起测试多个条件,并且知道某个条件比其他条件更可能满足或不满足测试,(根据这些测试是用 OR (||) 还是 AND (&&) 连接的,可以通过将该条件放在条件语句的最前面来加速脚本的执行。例如,如果三个条件都必须为真(使用 && 运算符),并且第二个测试失败,则第三个条件不会被测试。类似地,如果多个条件中只要有一个为真(使用 || 运算符),则当任何一个条件满足该测试时测试则停止。如果要测试的条件包括函数调用或其他代码,这种处理方式就特别有效。
快速判别的副作用的一个示例是:在下例中如果 runfirst() 返回 0 或 false, 则 runsecond 不会被执行。
if ((runfirst() == 0) || (runsecond() == 0)) // 若干代码
有多种方式来重复执行一条语句或语句块。通常重复执行被称为 循环。 典型情况是用某个变量测试来进行控制,每执行一次循环变量的取值都会更改。 Microsoft JScript 支持很多种循环: for 循环、 for...in 循环、 while 循环、 do...while 循环和 switch 循环。
for 语句指定了一个计数器变量,一个测试条件,以及更新该计数器的操作。在每次执行循环之前(这称为一遍循环或一次重复),都将测试该条件。在执行该循环后,计算机变量将在下一次循环之前被更新。如果循环条件永不会满足,则根本不会执行该循环。如果测试条件始终满足,则将导致无限循环。在有些情况下,前者可能是合乎需要的,而后者几乎没有用处,因此在编写循环条件时一定要小心。
/* 更新表达式 (下例中的 "icount++")将在循环结束时被执行,即在构成循环主体的语句块被执行后,在测试条件之前。 */ var howFar = 11; // 将循环次数限制为 11。 var sum = new Array(howFar); // 创建一个称为 sum 并具有 11 个成员的数组,这 11 个成员从 0 到 10。 var theSum = 0; sum[0] = 0; for(var icount = 1; icount < howFar; icount++) { // 在本例中将从 1 到 10 进行计数。 theSum += icount; sum[icount] = theSum; } var newSum = 0; for(var icount = 1; icount > howFar; icount++) { // 该循环根本不会被执行。 newSum += icount; } var sum = 0; for(var icount = 1; icount > 0; icount++) { // 这是一个无限循环。 sum += icount; }
JScript 提供了一种特别的循环方式来遍历一个对象的所有属性。 for...in 循环中的循环计数器将遍历数组中的所有索引。它是一个字符串,而不是数字。for (j in tagliatelleVerde) // tagliatelleVerde 是一个有多个属性的对象 { // 各种 JScript 代码语句。 }
while 循环与 for 循环非常相似。其不同之处是 while 循环没有内置的计数器或更新表达式。如果已经有由变量赋值反映的变化条件,并且希望使用该条件来控制语句或语句块的循环执行,就可以使用while 循环。var theMoments = ""; var theCount = 42; // 初始化计数器变量。 while (theCount >= 1) { if (theCount > 1) { theMoments = "Only " + theCount + " moments left!"; } else { theMoments = "Only one moment left!"; } theCount--; // 更新计数器变量。 } theMoments = "BLASTOFF!";
注意 由于 while 循环没有显式的内置计数器变量,因此比其他类型更容易产生无限循环。此外,部分原因是不易发现循环条件是在何时何地被更新的,因此很容易编写了一个实际上从不更新条件的 while 循环。在编写 while 循环时应特别小心。
Microsoft JScript 提供了一个语句来停止执行循环。break 语句可以用来在某些(特别)条件被满足时停止执行循环。continue 语句可以用来立即跳至下一次循环,即跳过余下的代码块并更新计数器变量,如 for 或 for...in 循环一样。var theComment = ""; var theRemainder = 0; var theEscape = 3; var checkMe = 27; for (kcount = 1; kcount <= 10; kcount++) { theRemainder = checkMe % kcount; if (theRemainder == theEscape) { break; // 第一次遇到 remainder 等于 escape 时就从循环退出。 } theComment = checkMe + " divided by " + kcount + " leaves a remainder of " + theRemainder; } for (kcount = 1; kcount <= 10; kcount++) { theRemainder = checkMe % kcount; if (theRemainder != theEscape) { continue; // 只选择那些等于 escape 的 remainders,忽略其它。 } // 使用选中的 remainders 的 JScript 代码。 } var theMoments = ""; var theCount = 42; // 初始化计数器。 while (theCount >= 1) { // if (theCount < 10) { // 警告! // 这里使用 continue 将导致一个无限循环!。 // continue; // } if (theCount > 1) { theMoments = "Only " + theCount + " moments left!"; } else { theMoments = "Only one moment left!"; } theCount--; // 更新计数器。 } theCount = "BLASTOFF!";