知道密钥的 Typescript Record 访问有多复杂?

ant*_*oPa 3 dictionary record typescript

在这个问题中读到,Javascript 的 Map 的检索/访问复杂度为 O(1)。Typescript 的记录有一个优点:可以打字。然而,我想知道 Typescript 的 Records 是否能给我们同样的访问性能。我们应该使用纯 JS 地图来优化数据访问速度吗?

T.J*_*der 5

我在这个问题中读到,Javascript 的 Map 的检索/访问复杂度为 O(1)。

Map这个问题具体是关于V8 JavaScript 引擎中的实现(2015 年)。您无法将其推广到其他实现中的映射,并且规范不保证 O(1)。所保证的是访问将与映射中的条目数量呈次线性关系。

Typescript 的记录有一个优点:可以打字。然而,我想知道 Typescript 的 Records 是否能给我们同样的访问性能。

TypeScript 的Record类型纯粹是 JavaScript 对象的编译时抽象。所以问题是:JavaScript 对象的属性的访问时间是否至少与访问 JavaScript 中的条目的访问时间一样好Map

这要看情况,但一般来说是的。事实上,对于具有稳定属性集的对象,在重要的情况下可能会快得多,因为在重要的情况下,现代 JavaScript 引擎将对象编译为带有静态属性槽的运行时生成的类,因此访问这些属性是一个常数时间操作 (O(1))。

但是,如果对象的内容随着时间的推移而变化(属性集不是相对静态的),则对对象所做的优化是不合适的,并且您可能会更好地使用Map.

请注意,除了性能之外,还有其他原因选择对象而不是 Map,或者选择 Map 而不是对象。例如,Map 的键可以是任何东西,但对象的键只能是字符串或符号。访问Map中的值需要调用函数;不是这样的对象属性。ETC。

有关 MDN 的更多信息