Javascript: Object.create(null) 对于数组(Array.create(null) 等效)
Javascript: Object.create(null) For Arrays (Array.create(null) Equivalent)
用空白原型初始化对象很容易:Object.create(null)
。但是,数组没有像对象那样方便的 Array.create
方法。那么,Object.create
的数组等价物是什么?
关于结果数组的访问速度*,初始化空白数组的最佳方法是什么?或者,所述空白数组中的访问速度*是否会比定期 []
初始化数组的访问速度*慢?
非常感谢任何和所有建设性的回应。
*'accessing speed' 的意思是从数组读取和写入属性的速度。
没有理由不使用 []
来创建数组。您可以在技术上调用 new Array()
,但它实际上与 []
.
相同
在幕后,Array
实际上只是一个 Object
,以数字作为键和一些特殊逻辑来确保键顺序(Object
在技术上没有,但Object
通常会保持它的键顺序,这不是保证)。
虽然您可以在技术上使用 Object.create(null)
创建您自己的 Array 实现,但它在性能上远不如内置 Array,因为大多数引擎都有特殊代码来提高其性能。
用空白(或任何其他定制的)原型创建数组没有意义。 Object.create(null)
的用例是一个 map1,其中没有原型干扰属性,但我们没有数组及其整数索引的问题。
如果你坚持这样做,
Object.setPrototypeOf([], null)
会实现这一点,但会创建一个非常奇怪的对象,它会破坏很多期望数组具有特定方法的代码。
Or, would the property access speed in said blank array be slower than that of a regularly initialized array?
是的,很可能 - 奇怪的 对象总是很有可能没有像标准对象那样被优化。无论如何,它不会更快。
1:当然,现在已弃用 true Map
s。
用空白原型初始化对象很容易:Object.create(null)
。但是,数组没有像对象那样方便的 Array.create
方法。那么,Object.create
的数组等价物是什么?
关于结果数组的访问速度*,初始化空白数组的最佳方法是什么?或者,所述空白数组中的访问速度*是否会比定期 []
初始化数组的访问速度*慢?
非常感谢任何和所有建设性的回应。
*'accessing speed' 的意思是从数组读取和写入属性的速度。
没有理由不使用 []
来创建数组。您可以在技术上调用 new Array()
,但它实际上与 []
.
在幕后,Array
实际上只是一个 Object
,以数字作为键和一些特殊逻辑来确保键顺序(Object
在技术上没有,但Object
通常会保持它的键顺序,这不是保证)。
虽然您可以在技术上使用 Object.create(null)
创建您自己的 Array 实现,但它在性能上远不如内置 Array,因为大多数引擎都有特殊代码来提高其性能。
用空白(或任何其他定制的)原型创建数组没有意义。 Object.create(null)
的用例是一个 map1,其中没有原型干扰属性,但我们没有数组及其整数索引的问题。
如果你坚持这样做,
Object.setPrototypeOf([], null)
会实现这一点,但会创建一个非常奇怪的对象,它会破坏很多期望数组具有特定方法的代码。
Or, would the property access speed in said blank array be slower than that of a regularly initialized array?
是的,很可能 - 奇怪的 对象总是很有可能没有像标准对象那样被优化。无论如何,它不会更快。
1:当然,现在已弃用 true Map
s。