gpt4 book ai didi

javascript - Javascript 数组中的未定义值是否使用任何内存或在 for-in 循环中迭代?

转载 作者:行者123 更新时间:2023-11-30 18:23:00 24 4
gpt4 key购买 nike

我正在为游戏构建一个实体系统,基本上我不确定是应该使用简单对象(字典)还是数组来按 ID 存储实体/组件。

我最大的问题是我不想要动态实体 ID。如果 id 只是一个字符串(使用字典来存储实体),那么它将始终有效,我可以使用 storage[id] 来获取该实体。

如果我使用数组,我想,表示存储数组中的索引 的实体的 ID 将会改变。考虑这个实体数组:

[
Entity,
Entity, //This one is being removed.
Entity
];

如果我要删除该数组中的第二个实体,我认为访问第三个数组所需的 id 必须更改为(现已删除的)第二个实体的 id(索引)。那是因为我考虑过根据 splice()ing 进行删除。

但是,我可以使用 delete 表达式将元素(实体)变成 undefined!而且,如果 Javascript 中的数组确实只是对象,并且对象在逻辑上有无限多的未定义值,这是否意味着数组中的未定义值不会耗尽内存?

最初,我认为数组是以在内存中对齐的方式实现的,索引只是第一个元素的偏移量,根据这个逻辑,我认为未定义的值至少会使用内存一个指针(因为我,实际上,认为指向元素的指针是对齐的,而不是元素本身)。

那么,如果我在这个数组中存储了 10k+ 个实体,然后删除其中的一半,那么 5k 个undefined 是否会使用任何内存?

另外,当我执行 for entity in array 循环时,是否会传递这些未定义的元素?

此外,我在哪里可以找到资源以了解数组实际上应该如何在 Javascript 中实现?我所能找到的只是数组的一般解释和关于如何使用它们的教程,但我想找出所有这些在某些情况下可能证明很重要的小怪癖。像“Javascript 怪癖”这样的网站会很棒。

最佳答案

数组不仅仅是对象。特别是 length 属性非常神奇。

当然,只要外部 API 保持不变,JavaScript 引擎就可以选择任何方式在内部表示数组。例如,如果您设置随机分隔的值,那么它们可能会存储为散列,但如果您设置连续的值,那么它们可能会被优化为一个数组。

for ... in 不枚举未设置的属性。这包括一个跳过值的数组文字,例如[true, , false],它只会枚举索引 0 和 2。

关于javascript - Javascript 数组中的未定义值是否使用任何内存或在 for-in 循环中迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11596081/

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