# serialize-javascript 中文文档

规范地址：https://npmcn.com/package/serialize-javascript/

版本：7\.1\.4
npm 元数据更新时间：2026-10-23T14:53:37.721Z
中文译文更新时间：2026-11-05T16:32:28.108Z
软件包许可：BSD-3-Clause

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

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

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

- 包体积（解压后）：25.7 kB，5 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- Node.js 要求：\>=20\.0\.0
- 运行依赖：0 个
- 首次发布：2014-09-16T16:06:10.211Z
- 最新版本发布：2026-10-23T14:53:37.301Z
- 近 30 天下载量：184692398（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：39（近 12 个月 12 个）

## 中文简介

将JavaScript序列化为包含正则表达式和函数的JSON的超集.

## 安装

```sh
npm install serialize-javascript
```

也可以使用：`pnpm add serialize-javascript`、`yarn add serialize-javascript`、`bun add serialize-javascript`

## README

# 序列化 Java 脚本

将 JavaScript 序列化为 a _超级集_ 包括正则表达式、日期和函数.

[![npm Version](https://img.shields.io/npm/v/serialize-javascript.svg?style=flat-square)](https://www.npmjs.org/package/serialize-javascript) ![Test](https://github.com/yahoo/serialize-javascript/workflows/Test/badge.svg)

## 概览

此套件中的代码开始其作为一个内部模块的寿命到 [表达式](https://github.com/yahoo/express-state)为了扩大其作用,它现在生活在 `serialize-javascript` —— npm上的独立软件包.

你也许在想: **怎么样 `JSON.stringify()`来啊?** 我们发现有时我们需要序列化 JavaScript **函数**, (中文(简体) ), **正则说明**, (中文(简体) ), **日期**, (中文(简体) ), **套装** 或者说 **地图**一个伟大的例子是使用客户端 URL 路由的网络应用程序,其中路由定义为regexps,需要从服务器共享到客户端.

从此软件包的单导出函数返回的字符串是文字 JavaScript, 可以保存到一个 `.js` 文件,或者通过制作一个文件的内容被嵌入到 HTML 文档中 `<script>` 键.

> **HTML字符和JavaScript行终止符自动被逃脱.**

请注意,ES6 Sets & Maps的序列化需要支持 `Array.from` (不见于IE或节点 < 0.12)或a `Array.from` 混合填充剂.

> \[尖叫声\] 利用这个软件包将任意函数传递到 [工人线程](https://nodejs.org/api/worker_threads.html),因为你不能直接通过 `postMessage()`然而,在一般情况下,无法在工人线条之间传递功能。 此软件包允许您序列化 _有点_ 函数,但它有局限性.
> 
> 例如,如果一个函数引用了函数体外的东西,如果序列化和去序列化,它就不会正常运行. 这可包括: [关闭变量](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures) 或从其他包件进口。 序列化功能要正常运行,必须完全自成一体.
> 
> 一般来说,不可能将任意的JavaScript发送到一个工人线程,并假装它运行的方式与在主线程上运行的方式相同. 这个包裹不会让你这么做的.

## 安装

使用 npm 安装 :

```shell
$ npm install serialize-javascript
```

## 使用量

```js
var serialize = require('serialize-javascript');

serialize({
    str  : 'string',
    num  : 0,
    obj  : {foo: 'foo'},
    arr  : [1, 2, 3],
    bool : true,
    nil  : null,
    undef: undefined,
    inf  : Infinity,
    date : new Date("Thu, 28 Apr 2016 22:02:17 GMT"),
    map  : new Map([['hello', 'world']]),
    set  : new Set([123, 456]),
    fn   : function echo(arg) { return arg; },
    re   : /([^\s]+)/g,
    big  : BigInt(10),
    url  : new URL('https://example.com/'),
});
```

以上将产生以下字符串输出:

```js
'{"str":"string","num":0,"obj":{"foo":"foo"},"arr":[1,2,3],"bool":true,"nil":null,"undef":undefined,"inf":Infinity,"date":new Date("2016-04-28T22:02:17.000Z"),"map":new Map([["hello","world"]]),"set":new Set([123,456]),"fn":function echo(arg) { return arg; },"re":new RegExp("([^\\\\s]+)", "g"),"big":BigInt("10"),"url":new URL("https://example.com/")}'
```

注意: 要生成被美化的字符串, 您可以将可选的第二个参数传递给 `serialize()` 以定义缩进所用的空格数.

### HTML 字符自动退出

此软件包的一个主要特点是将代码序列化为一串可嵌入 HTML 文档的文字 JavaScript, 将其添加为 HTML 文档的内容 `<script>` 键。 为了让这个安全,HTML字符和JavaScript行终止符自动被逃脱.

```js
serialize({
    haxorXSS: '</script>'
});
```

上面将产生以下字符串, HTML 逃逸输出, 它可以安全地放入 HTML 文档, 因为它不会导致内置脚本元素终止 :

```js
'{"haxorXSS":"\\u003C\\u002Fscript\\u003E"}'
```

> 你可以通过一个可选的 `unsafe` 参数到 `serialize()` 直接连载.

### 选项

这个 `serialize()` 函数接受一个 `options` 对象作为其第二个参数。 所有选项都默认为 `undefined`数字 :

#### `options.space`

此选项与 `space` 可转至 [`JSON.stringify`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)。它可用于在序列化输出中添加白空间和缩进,使其更可读.

```js
serialize(obj, {space: 2});
```

#### `options.isJSON`

此选项是给 `serialize()` 表示正在序列化的对象不包含任何函数或正则exps值。 这使得热通路可以使序列化速度快于3x. 如果你正在序列化很多数据,并且知道它的纯JSON,那么你就可以启用这个选项来加速.

**说明:** 当使用此选项时, 输出会仍然被逃脱以防范 XSS .

```js
serialize(obj, {isJSON: true});
```

#### `options.unsafe`

此选项用于信号 `serialize()` 我们想要做一个直接的转换, 没有 XSS 的保护。 这一选项需要明确设定为: `true`。 HTML 字符和 JavaScript 线词终止符将不会被逃脱。 你必须自己滚.

```js
serialize(obj, {unsafe: true});
```

#### `options.ignoreFunction`

此选项用于信号 `serialize()` 我们不想序列化 JavaScript 函数. 只要把功能像 `JSON.stringify` 做,但其他特性将如预期的那样发挥作用.

```js
serialize(obj, {ignoreFunction: true});
```

## 淡化

对于某些用法来说,你可能需要将字符串去序列化。 这显然不是本单元的一部分。 不过,你可以轻松地自己写:

```js
function deserialize(serializedJavascript){
  return eval('(' + serializedJavascript + ')');
}
```

**说明:** 别忘了连环画的括号 作为开口的括号 `{` 将被视为一个机构的开始.

## 许可证

这个软件可以在雅虎下自由使用! BSD许可证. 见 [自由文件](https://github.com/yahoo/serialize-javascript/blob/main/LICENSE) 许可证文本和版权信息.

## 常见问题

### serialize-javascript 是什么？

将JavaScript序列化为包含正则表达式和函数的JSON的超集\.

### 如何安装 serialize-javascript？

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

### serialize-javascript 支持 TypeScript 吗？

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

### serialize-javascript 支持 ESM 还是 CommonJS？

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

### serialize-javascript 需要什么版本的 Node\.js？

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

### serialize-javascript 可以商用吗？

serialize-javascript 使用 BSD-3-Clause 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。另外不得用原作者名义为衍生产品背书。以上为概括，不构成法律意见，请以许可原文为准。

### serialize-javascript 的下载量有多少？

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

### serialize-javascript 还在维护吗？

最新版本 7\.1\.4 发布于 2026/10/23（13 天前）；至今共发布 39 个版本，其中过去 12 个月发布了 12 个；首次发布于 2014/09/17。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

