gpt4 book ai didi

Javascript 数组效率低于 C++ 中的数组

转载 作者:行者123 更新时间:2023-11-30 08:35:25 26 4
gpt4 key购买 nike

我正在读一本关于 JS 数据结构的书,上面提到:

Arrays in javascript are implemented as objects, causing them to be less efficient than arrays built in other languages such as C++ and Java.

为什么?

最佳答案

JavaScript 的 Array 类型在规范中被定义为对象(不是真正的连续内存数组),对特定类型的属性名称进行特殊处理规范调用“索引”、一个特定的原型(prototype) (Array.prototype) 和一个 length 属性,其行为不仅仅是存储您放入其中的值。那么,根据规范,使用数组之间几乎没有区别:

var a = [];
a[0] = "foo";
a.notAnIndex = "bar";
console.log(a[0]); // "foo"
console.log(a.notAnIndex); // "bar"

...并使用一个对象:

var o = {};
o[0] = "foo";
o.notAnIndex = "bar";
console.log(o[0]); // "foo"
console.log(o.notAnIndex); // "bar"

...当然,除了对象将具有不同的原型(prototype)并且不会具有特殊的 length 属性。根据规范,即使在上面的 a[0] 中,0 也会转换为 string ("0") 然后查找具有该名称的属性以获取值。

这是符合规范的,也是 JavaScript 引擎多年前所做的。

如果可能的话,现代 JavaScript 引擎会尝试使用真正的连续内存数组,如果它看起来是代码使用数组的方式,并在必要时回退到字典(对象)。聪明的,这些 JS 引擎编写者。 :-)

JavaScript 现在还有其他类型的数组,称为 typed arrays ,例如 Int32Array,它们是真正的数组而不是字典。

更多(在我贫血的小博客上):A myth of arrays


我还没有进入数组与链表的问题,因为,作为 Bergi says ,这确实是一个单独的问题,并且已经在 SO 上的多个问题中得到解决,例如 this one , this one , this one ,以及许多其他的。

关于Javascript 数组效率低于 C++ 中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31791221/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com