do...while

do...while 语句创建一个循环,只要测试条件计算结果为 true,就会执行指定的语句。条件是在执行语句后计算的,导致指定的语句至少执行一次。

试一试

语法

js
do
  statement
while (condition);
语句

至少执行一次并在条件计算结果为 true 时重新执行的语句。可以使用 块语句 执行多个语句。

条件

每次循环后计算的表达式。如果此条件 计算结果为 true,则重新执行 statement。当条件 计算结果为 false 时,执行将继续执行 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);
// Despite i === 0 this will still loop as it starts off without the test

console.log(result);

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

因为语句始终执行一次,所以 do...while (false) 与执行语句本身相同。这在类似 C 的语言中是一种常见的习惯用法,它允许您使用 break 提前退出分支逻辑。

js
do {
  if (!user.loggedIn) {
    console.log("You are not logged in");
    break;
  }
  const friends = user.getFriends();
  if (!friends.length) {
    console.log("No friends found");
    break;
  }
  for (const friend of friends) {
    handleFriend(friend);
  }
} while (false);
// The rest of code

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

js
handleFriends: {
  if (!user.loggedIn) {
    console.log("You are not logged in");
    break handleFriends;
  }
  const friends = user.getFriends();
  if (!friends.length) {
    console.log("No friends found");
    break handleFriends;
  }
  for (const friend of friends) {
    handleFriend(friend);
  }
}

或使用函数

js
function handleFriends() {
  if (!user.loggedIn) {
    console.log("You are not logged in");
    return;
  }
  const friends = user.getFriends();
  if (!friends.length) {
    console.log("No friends found");
    return;
  }
  for (const friend of friends) {
    handleFriend(friend);
  }
}

使用赋值作为条件

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

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

但是当您这样做时,存在可读性权衡。 while 文档有一个 使用赋值作为条件 部分,其中包含我们的建议。

规范

规范
ECMAScript 语言规范
# sec-do-while-statement

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅