# esutils 中文文档

规范地址：https://npmcn.com/package/esutils/

版本：2\.0\.3
npm 元数据更新时间：2023-05-10T18:27:50.347Z
中文译文更新时间：2026-11-04T20:08:41.375Z
软件包许可：BSD-2-Clause

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/esutils
原文对照：https://npmcn.com/package/esutils/?lang=original
项目主页：https://github.com/estools/esutils
源码仓库：https://github.com/estools/esutils

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：50.6 kB，7 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- Node.js 要求：\>=0\.10\.0
- 运行依赖：0 个
- 首次发布：2013-11-25T07:21:04.038Z
- 最新版本发布：2019-07-31T01:10:54.228Z
- 近 30 天下载量：636881579（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：13（近 12 个月 0 个）

## 中文简介

用于ECMAScript语言工具的工具箱

## 安装

```sh
npm install esutils
```

也可以使用：`pnpm add esutils`、`yarn add esutils`、`bun add esutils`

## README

### esutils [![Build Status](https://secure.travis-ci.org/estools/esutils.svg)](http://travis-ci.org/estools/esutils)

esutils ([esutils](http://github.com/estools/esutils))是 用于ECMAScript语言工具的工具箱。

### API

### ast

#### ast.isExpression(节点)

返回true `node` 表达式是否如ECMA262版5.1节所定义 [十一](https://es5.github.io/#x11)。

#### ast.isStatement(节点)

返回true `node` 声明是否如ECMA262版5.1节所定义 [十二](https://es5.github.io/#x12)。

#### ast.isIterationStatement(节点)

返回true `node` 是ECMA262版中定义的IterationStatement吗 5.1节 [12.6](https://es5.github.io/#x12.6)。

#### ast.isSourceElement(节点)

返回true `node` SourceElement在ECMA262版5.1中定义吗 部分 [14](https://es5.github.io/#x14)。

#### ast.trailingStatement(节点)

返回 `Statement?` 如果 `node` 已经落后于 `Statement`。

```js
if (cond)
    consequent;
```

在服用这个的时候 `IfStatement`,返回 `consequent;` 声明。

#### ast.isProblematicIfStatement(节点)

返回true `node` 是一个有问题的IfStatement。如果 `node` 是有问题的 `IfStatement`， `node` 不能表示为一对一的JavaScript代码。

```js
{
    type: 'IfStatement',
    consequent: {
        type: 'WithStatement',
        body: {
            type: 'IfStatement',
            consequent: {type: 'EmptyStatement'}
        }
    },
    alternate: {type: 'EmptyStatement'}
}
```

上面的节点不能表示为JavaScript代码，因为顶层 `else` 交替属于一种内在 `IfStatement`。

### 代码

#### code.isDecimalDigit(代码)

如果提供的代码是十进制数字，则返回true。

#### code.isHexDigit(代码)

如果提供的代码是十六进制数字，则返回true。

#### code.isOctalDigit(代码)

如果提供的代码是八进制数字则返回true。

#### code.isWhiteSpace(代码)

如果提供的代码为空白，则返回true。空白字符在ECMA262中有正式定义。

#### code.isLineTerminator(代码)

如果提供的代码是行结束符则返回true。在ECMA262中正式定义了行结束符。

#### code.isIdentifierStart(代码)

如果提供的代码可以是ECMA262标识符的第一个字符，则返回true。它们在ECMA262中有正式定义。

#### code.isIdentifierPart(代码)

如果提供的代码可以是ECMA262标识符的尾随字符，则返回true。它们在ECMA262中有正式定义。

### 关键字

#### 关键字。isKeywordES5 (id、严格)

返回 `true` 如果提供的标识符字符串是关键字或未来保留字 在ECMA262 5.1版。它们在ECMA262章节中有正式定义 [7.6.1.1](http://es5.github.io/#x7.6.1.1) 和 [7.6.1.2](http://es5.github.io/#x7.6.1.2)， 分别。如果 `strict` 标志为真，此函数另外检查是否 `id` 是严格模式下的关键字或将来保留字。

#### 关键字。isKeywordES6 (id、严格)

返回 `true` 如果提供的标识符字符串是关键字或未来保留字 在ECMA262版中它们在ECMA262章节中有正式定义 [11.6.2.1](http://ecma-international.org/ecma-262/6.0/#sec-keywords) 和 [11.6.2.2](http://ecma-international.org/ecma-262/6.0/#sec-future-reserved-words)， 分别。如果 `strict` 标志为真，此函数另外检查是否 `id` 是严格模式下的关键字或将来保留字。

#### 关键字。isReservedWordES5 (id、严格)

返回 `true` 如果提供的标识符字符串是ECMA262版本5.1中的保留字。 它们在ECMA262章节中有正式定义 [7.6.1](http://es5.github.io/#x7.6.1)。 如果 `strict` 标志为真，此函数另外检查是否 `id` 是严格模式下的保留词。

#### 关键字。isReservedWordES6 (id、严格)

返回 `true` 如果提供的标识符字符串是ECMA262版本6中的保留字。 它们在ECMA262章节中有正式定义 [11.6.2](http://ecma-international.org/ecma-262/6.0/#sec-reserved-words)。 如果 `strict` 标志为真，此函数另外检查是否 `id` 是严格模式下的保留词。

#### keyword.isRestrictedWord (id)

返回 `true` 如果提供的标识符字符串是 `eval` 或 `arguments`。 它们在ECMA262 5.1和5.1版中受到严格模式代码的限制 参见ECMA262第6版章节 [12.1.1](http://ecma-international.org/ecma-262/6.0/#sec-identifiers-static-semantics-early-errors)。

#### keyword.isIdentifierNameES5 (id)

如果提供的标识符字符串是指定的IdentifierName，则返回true ECMA262版5.1节 [7.6](https://es5.github.io/#x7.6)。

#### keyword.isIdentifierNameES6 (id)

如果提供的标识符字符串是指定的IdentifierName，则返回true ECMA262第6版章节 [11.6](http://ecma-international.org/ecma-262/6.0/#sec-names-and-keywords)。

#### 关键字。isIdentifierES5 (id、严格)

如果提供的标识符字符串是指定的标识符，则返回true ECMA262版5.1节 [7.6](https://es5.github.io/#x7.6)． 如果 `strict` 标志为真，此函数另外检查是否 `id` 是标识符 在严格模式下。

#### 关键字。isIdentifierES6 (id、严格)

如果提供的标识符字符串是指定的标识符，则返回true ECMA262第6版章节 [12.1](http://ecma-international.org/ecma-262/6.0/#sec-identifiers)。 如果 `strict` 标志为真，此函数另外检查是否 `id` 是严格模式下的标识符。

### 许可证

版权所有(C) 2013 [Yusuke Suzuki](http://github.com/Constellation) (推特: [@Constellation](http://twitter.com/Constellation))和其他贡献者。

重新分发和使用的源代码和二进制形式，有或没有 在满足下列条件的情况下，允许进行修改：

-   重新发布源代码必须保留上述版权 注意，此条件列表和以下免责声明。
    
-   以二进制形式重新发布必须复制上述版权 注意，本条件列表和以下免责声明中的 随发行版提供的文件和/或其他材料。
    

本软件由版权所有者和贡献者“按原样”提供。 以及任何明示或暗示的保证，包括但不限于 对适销性和适合某一特定目的的默示保证 是否认。在任何情况下，我都不承担任何责任 直接的、间接的、偶然的、特殊的、惩戒性的或后果性的损害 (包括但不限于，替代商品或服务的采购； 损失：失去使用、数据或利润；或业务中断)，无论如何引起和 在任何责任理论中，无论是合同责任、严格责任还是侵权责任 （包括疏忽或其他）因使用 本软件即使被告知有这种损害的可能性。

## 常见问题

### esutils 是什么？

用于ECMAScript语言工具的工具箱

### 如何安装 esutils？

在项目目录运行 npm install esutils，或使用 pnpm add / yarn add / bun add。

### esutils 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/esutils 是否存在。

### esutils 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### esutils 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=0\.10\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### esutils 可以商用吗？

esutils 使用 BSD-2-Clause 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### esutils 的下载量有多少？

根据 npm 官方下载统计，esutils 在 2026/10/05 – 2026/11/03 这 30 天内被下载 636,881,579 次，日均约 21,229,386 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### esutils 还在维护吗？

最新版本 2\.0\.3 发布于 2019/07/31（7 年前）；至今共发布 13 个版本，其中过去 12 个月发布了 0 个；首次发布于 2013/11/25。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

