用空白原型初始化对象很容易:Object.create(null)
. 但是,数组没有Array.create
像对象那样方便的方法。那么,数组等价于Object.create
什么?
关于结果数组的访问速度*初始化空白数组的最佳方法是什么?或者,所述空白数组中的访问速度*是否会比定期[]
初始化数组的访问速度*慢?
非常感谢任何和所有建设性的回应。
*“访问速度”是指从数组中读取和写入属性的速度。
用空白原型初始化对象很容易:Object.create(null)
. 但是,数组没有Array.create
像对象那样方便的方法。那么,数组等价于Object.create
什么?
关于结果数组的访问速度*初始化空白数组的最佳方法是什么?或者,所述空白数组中的访问速度*是否会比定期[]
初始化数组的访问速度*慢?
非常感谢任何和所有建设性的回应。
*“访问速度”是指从数组中读取和写入属性的速度。
使用空白(或任何其他自定义)原型创建数组是没有意义的。的用例Object.create(null)
是映射1,其中没有原型会干扰属性,但数组及其整数索引没有这个问题。
如果你坚持这样做,
Object.setPrototypeOf([], null)
将实现这一点,但会创建一个非常奇怪的对象,该对象会破坏许多期望数组具有某些方法的代码。
或者,所述空白数组中的属性访问速度会比定期初始化的数组慢吗?
是的,很可能 -奇怪的对象总是很有可能没有像标准对象一样被优化。无论如何,它不会更快。
1:当然,它们现在已被弃用,取而代之的是true Map
。
没有理由不只[]
用于创建数组。从技术上讲,您可以调用new Array()
,但实际上与 . 相同[]
。
在引擎盖下,anArray
实际上只是一个Object
以数字作为键和一些特殊逻辑来确保键顺序(Object
技术上没有,虽然Object
通常会保持它的键顺序,但这不是保证)。
虽然您可以在技术上使用Object.create(null)
来创建自己的 Array 实现,但它的性能远不如内置 Array,因为大多数引擎都有特殊的代码来提高其性能。