语句和声明

JavaScript 应用程序由具有适当语法的语句组成。单个语句可能跨越多行。如果每个语句都用分号隔开,则多行语句可能会出现在同一行上。这不是关键字,而是一组关键字。

按类别分类的语句和声明

有关字母顺序排列的列表,请参见左侧的侧边栏。

控制流

回归

指定函数要返回的值。

休息

终止当前循环、switch 或标签语句,并将程序控制权转移到终止语句后的语句。

继续

终止当前或标记循环的当前迭代中的语句的执行,并继续执行循环的下一迭代。

抛出

抛出用户定义的异常。

如果...否则

如果指定条件为真,则执行语句。如果条件为假,则可以执行另一个语句。

开关

评估表达式,将表达式的值与 case 子句匹配,并执行与该 case 关联的语句。

尝试...捕捉

标记要尝试的一组语句,并指定响应,如果抛出异常。

声明变量

变量

声明变量,可以选择将其初始化为一个值。

声明块级作用域的局部变量,可以选择将其初始化为一个值。

常数

声明一个只读的命名常量。

函数和类

功能

使用指定参数声明函数。

函数*

生成器函数使编写 迭代器 更容易。

异步函数

使用指定参数声明异步函数。

异步函数*

异步生成器函数使编写异步 迭代器 更容易。

声明一个类。

迭代

do...while

创建一个循环,该循环执行指定的语句,直到测试条件评估为假。条件是在执行语句后评估的,导致指定的语句至少执行一次。

为了

创建一个循环,该循环由三个可选表达式组成,这些表达式用括号括起来并用分号隔开,后面跟着在循环中执行的语句。

为了...在

以任意顺序迭代对象的枚举属性。对于每个不同的属性,都可以执行语句。

为了...of

迭代可迭代对象(包括 数组、类数组对象、迭代器和生成器),调用一个自定义迭代钩子,其中包含要为每个不同属性的值执行的语句。

为了等待...of

迭代异步可迭代对象、类数组对象、迭代器和生成器,调用一个自定义迭代钩子,其中包含要为每个不同属性的值执行的语句。

创建一个循环,该循环只要测试条件评估为真,就执行指定的语句。条件是在执行语句之前评估的。

其他

空语句用于不提供任何语句,尽管 JavaScript 语法会期望有一个语句。

块语句用于对零个或多个语句进行分组。块由一对花括号分隔。

表达式语句

表达式语句评估表达式并丢弃其结果。它允许表达式执行副作用,例如执行函数或更新变量。

调试器

调用任何可用的调试功能。如果没有可用的调试功能,则此语句不会产生任何影响。

出口

用于导出函数,使它们可用于外部模块和其他脚本中的导入。

进口

用于导入从外部模块、其他脚本导出的函数。

标签

为语句提供一个标识符,您可以使用 breakcontinue 语句引用该标识符。

with 已弃用

扩展语句的作用域链。

语句和声明之间的区别

在本节中,我们将混合使用两种类型的构造:语句声明。它们是两个不相交的语法集。以下是声明

上面列表 中的所有其他内容都是语句。

术语“语句”和“声明”在 JavaScript 的正式语法中具有精确的含义,这会影响它们在代码中的放置位置。例如,在大多数控制流结构中,主体只接受语句,例如 if...else 的两个分支

js
if (condition)
  statement1;
else
  statement2;

如果使用声明而不是语句,则会是 SyntaxError。例如,let 声明不是语句,因此您不能将其原始形式用作 if 语句的主体。

js
if (condition)
  let i = 0; // SyntaxError: Lexical declaration cannot appear in a single-statement context

另一方面,var 是一个语句,因此您可以将其单独用作 if 主体。

js
if (condition)
  var i = 0;

您可以将声明视为“绑定 标识符到值”,并将语句视为“执行操作”。var 是语句而不是声明的事实是一个特例,因为它不遵循正常的词法作用域规则,并且可能会产生副作用,即创建全局变量、更改现有的 var 定义的变量,以及定义在块之外可见的变量(因为 var 定义的变量不是块级作用域的)。

再举一个例子,标签 只能附加到语句。

js
label: const a = 1; // SyntaxError: Lexical declaration cannot appear in a single-statement context

注意:有一个遗留语法允许 函数声明具有标签,但它只被标准化是为了与 Web 现实兼容。

为了解决这个问题,您可以将声明括在花括号中,这会使它成为 块语句 的一部分。

js
label: {
  const a = 1;
}

if (condition) {
  let i = 0;
}

浏览器兼容性

BCD 表只在启用 JavaScript 的浏览器中加载。

另请参阅