Movatterモバイル変換


[0]ホーム

URL:


MDN Web Docs

此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

do...while

BaselineWidely available

do...while 语句创建了一个循环,只要测试条件为 true,该循环就会执行指定语句。执行语句后会对条件进行评估,从而使指定语句至少执行一次。

尝试一下

let result = "";let i = 0;do {  i = i + 1;  result = result + i;} while (i < 5);console.log(result);// Expected output: "12345"

语法

js
do  statementwhile (condition);
statement

执行至少一次的语句,并在每次条件值为真时重新执行。想在循环中执行多行语句,可使用语句包裹这些语句。

condition

循环中每次都会计算的表达式。如果condition值为真statement 会再次执行。当condition值为假时,控制权传递到do...while 之后的语句。

描述

与其他循环语句一样,你可以在statement 内使用控制流语句

  • break 停止执行statement,转到循环后的第一条语句。
  • continue 停止执行statement,并重新评估condition

do...while 语句的语法要求在末尾加上分号,但如果缺少分号导致语法无效,自动分号补全过程可能会为你插入一个分号。

示例

使用 do...while

下面的例子中,do...while 循环至少迭代一次,并且继续迭代直到i 不再小于 5 时结束。

js
let result = "";let i = 0;do {  i += 1;  result += `${i} `;} while (i > 0 && i < 5);// 尽管 i === 0,但仍会进入循环,因为开始时没有进行测试console.log(result);

使用 false 作为 do...while 条件

由于语句总是被执行一次,do...while (false) 等同于执行语句本身。这是类 C 语言中常见的习语,它允许你使用break 来提前跳出分支逻辑。

js
do {  if (!user.loggedIn) {    console.log("你未登陆");    break;  }  const friends = user.getFriends();  if (!friends.length) {    console.log("未找到朋友");    break;  }  for (const friend of friends) {    handleFriend(friend);  }} while (false);// 剩余代码

在 JavaScript 中,有一些替代方法,例如使用带有break带标签块语句

js
handleFriends: {  if (!user.loggedIn) {    console.log("你未登陆");    break handleFriends;  }  const friends = user.getFriends();  if (!friends.length) {    console.log("未找到朋友");    break handleFriends;  }  for (const friend of friends) {    handleFriend(friend);  }}

或者使用函数:

js
function handleFriends() {  if (!user.loggedIn) {    console.log("你未登陆");    return;  }  const friends = user.getFriends();  if (!friends.length) {    console.log("未找到朋友");    return;  }  for (const friend of friends) {    handleFriend(friend);  }}

使用赋值作为条件

在某些情况下,使用赋值作为条件是有意义的,例如这样:

js
do {  // …} while ((match = regexp.exec(str)));

但是,当你这样做时,就会在可读性上有所取舍。在while 文档中有一个使用赋值作为条件部分,其中包含了我们的建议。

规范

Specification
ECMAScript® 2026 Language Specification
# sec-do-while-statement

浏览器兼容性

参见

Help improve MDN

Learn how to contribute.

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp