# internmap 中文文档

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

版本：2\.0\.3
npm 元数据更新时间：2022-05-06T01:05:30.176Z
中文译文更新时间：2026-11-05T15:17:41.376Z
软件包许可：ISC

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

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

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

- 包体积（解压后）：10.5 kB，6 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- Node.js 要求：\>=12
- 运行依赖：0 个
- 首次发布：2021-01-21T20:28:26.810Z
- 最新版本发布：2021-09-20T03:11:43.688Z
- 近 30 天下载量：372633298（2026-10-06 至 2026-11-04，npm 官方下载统计）
- 已发布版本数：6（近 12 个月 0 个）

## 中文简介

自动密钥间隔的映射和设定

## 安装

```sh
npm install internmap
```

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

## README

# 实习地图

_现场实例见https://observatorablehq.com/@mbostock/internmap._

如果您在 JavaScript 映射中将日期作为密钥( 或作为 Set 中的值) , 您可能会惊讶它不会像你预期的那样工作 .

```js
dateMap = new Map([
  [new Date(Date.UTC(2001, 0, 1)), "red"],
  [new Date(Date.UTC(2001, 0, 1)), "green"] // distinct key!
])
```

```js
dateMap.get(new Date(Date.UTC(2001, 0, 1))) // undefined!
```

因为地图使用 [相同的ValueZero算法](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness) 确定关键平等:要将两个日期视为相同日期,它们必须是同一个实例(同一个目标),而不是仅仅同一个时间。 平等经营者也是如此.

```js
{
  const date1 = new Date(Date.UTC(2001, 0, 1));
  const date2 = new Date(Date.UTC(2001, 0, 1));
  return date1 === date2; // false!
}
```

可以通过使用数字或字符串等原始值取而代之来避免这个问题. 不过, (在从地图上取出密钥时 _地图_钥匙或 _地图_进入,或者在地图上徘徊的时候 上面的倒数是新的日期( N)_键_) (中文(简体) ). 另外,如果你忘记在使用时将钥匙按到数字 _地图_因为地图不会出错; 它只会返回未定义的地图

```js
numberMap = new Map([[978307200000, "red"]])
numberMap.get(978307200000) // "red"
numberMap.get(new Date(978307200000)) // undefined; oops!
```

如果地图与设定“只是工作”日期, 或者任何支持对象 [_对象_价值](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf)? 吗?

输入 **实习地图**。 。 。 . [_实习_](https://en.wikipedia.org/wiki/String_interning) 指只存储每个不同密钥的一个副本。 InternMap认为代表同一时刻的两个Date例是等同的,只存储初审.

```js
map = new InternMap([
  [new Date(Date.UTC(2001, 0, 1)), "red"],
  [new Date(Date.UTC(2001, 0, 1)), "green"] // replaces previous entry
])
```

```js
map.get(new Date(Date.UTC(2001, 0, 1))) // "green"
```

```js
[...map.keys()] // [2001-01-01]
```

InternMap 扩展了地图, 所以只要你喜欢这样的行为, 就可以直接放进去。 因为实习医生打电话来 _对象_仅对非原始密钥的值,注意您也可以通过原始密钥.

```js
map.get(978307200000) // "green"; this works too!
```

InternMap根据其相關原始价值只保留了第一个显著的密钥. 避免在地图上添加不一致类型的密钥.

```js
map2 = new InternMap([
  [978307200000, "red"], // danger!
  [new Date(Date.UTC(2001, 0, 1)), "blue"]
])
```

```js
map2.get(new Date(Date.UTC(2001, 0, 1))) // "blue"; this still works…
```

```js
[...map2.keys()] // [978307200000]; but the key isn’t a Date
```

当 InternMap 使用时 _对象_.valueOf 默认计算 intern 密钥,您可以将一个密钥函数作为第二个参数传递给构建者以改变行为. 例如,如果使用JSON.stringify,可以使用数组作为复合键(假设数组元素可以被序列化为JSON).

```js
map3 = new InternMap([
  [["foo", "bar"], 1],
  [["foo", "baz"], 2],
  [["goo", "bee"], 3]
], JSON.stringify)
```

```js
map3.get(["foo", "baz"]) // 2
```

有个 **实习班** 课,太.

```js
set = new InternSet([
  new Date(Date.UTC(2000, 0, 1)),
  new Date(Date.UTC(2001, 0, 1)),
  new Date(Date.UTC(2001, 0, 1))
])
```

## 常见问题

### internmap 是什么？

自动密钥间隔的映射和设定

### 如何安装 internmap？

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

### internmap 支持 TypeScript 吗？

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

### internmap 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

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

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

### internmap 可以商用吗？

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

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

根据 npm 官方下载统计，internmap 在 2026/10/06 – 2026/11/04 这 30 天内被下载 372,633,298 次，日均约 12,421,110 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### internmap 还在维护吗？

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

