2

用空白原型初始化对象很容易:Object.create(null). 但是,数组没有Array.create像对象那样方便的方法。那么,数组等价于Object.create什么?

关于结果数组的访问速度*初始化空白数组的最佳方法是什么?或者,所述空白数组中的访问速度*是否会比定期[]初始化数组的访问速度*慢?

非常感谢任何和所有建设性的回应。


*“访问速度”是指从数组中读取和写入属性的速度。

4

2 回答 2

2

使用空白(或任何其他自定义)原型创建数组是没有意义的。的用例Object.create(null)是映射1,其中没有原型会干扰属性,但数组及其整数索引没有这个问题。
如果你坚持这样做,

Object.setPrototypeOf([], null)

将实现这一点,但会创建一个非常奇怪的对象,该对象会破坏许多期望数组具有某些方法的代码。

或者,所述空白数组中的属性访问速度会比定期初始化的数组慢吗?

是的,很可能 -奇怪的对象总是很有可能没有像标准对象一样被优化。无论如何,它不会更快。

1:当然,它们现在已被弃用,取而代之的是true Map

于 2017-06-19T20:25:57.070 回答
1

没有理由不只[]用于创建数组。从技术上讲,您可以调用new Array(),但实际上与 . 相同[]

在引擎盖下,anArray实际上只是一个Object以数字作为键和一些特殊逻辑来确保键顺序(Object技术上没有,虽然Object通常会保持它的键顺序,但这不是保证)。

虽然您可以在技术上使用Object.create(null)来创建自己的 Array 实现,但它的性能远不如内置 Array,因为大多数引擎都有特殊的代码来提高其性能。

于 2017-06-19T20:09:34.887 回答