Javascript数组中未定义的值是否使用任何内存或在for in循环中迭代
Do undefined values in Javascript arrays use any memory or get iterated over in a for-in loop?
我正在为一个游戏构建一个实体系统,基本上我不确定我是否应该使用简单的对象(字典)或数组来按id存储实体/组件。
我最大的问题是我不想要一个动态实体id。如果id只是一个字符串(使用字典来存储实体),那么它总是有效的,我可以使用storage[id]来访问该实体。
我想,如果我使用数组,实体的id(表示存储阵列中的索引)会发生变化。考虑以下实体阵列:
[
Entity,
Entity, //This one is being removed.
Entity
];
如果我要删除该数组中的第二个实体,我认为访问第三个数组所需的id必须更改为(现在已删除的)第二个图元的id(索引)。这是因为我考虑过从splice()
ing的角度进行删除。
但是,我可以使用delete
表达式将元素(实体)转换为undefined
!而且,如果Javascript中的数组实际上只是对象,并且对象在逻辑上有无限多个未定义的值,这是否意味着数组中的未定义值不会占用内存?
最初,我认为数组是以在内存中对齐的方式实现的,索引只是第一个元素的偏移量,通过这种逻辑,我认为未定义的值至少会使用指针的内存(因为我,实际上,认为指向元素的指针是对齐的,而不是元素本身)。
那么,如果我在这个数组中存储了10k多个实体,而delete
存储了其中的一半,5k的undefined
会使用任何内存吗?
此外,当我执行for entity in array
循环时,会传递这些未定义的元素吗?
此外,我在哪里可以找到资源来查看实际上应该如何在Javascript中实现?我所能找到的只是对数组的一般解释和如何使用它们的教程,但我想了解在某些情况下可能很重要的这些小怪癖。像"Javascript怪癖"这样的网站会很棒。
数组不仅仅是对象。特别是length
属性非常神奇。
当然,只要外部API保持不变,JavaScript引擎就可以选择任何方式在内部表示数组。例如,如果设置随机分隔的值,则它们可能会存储为哈希,但如果设置连续的值,那么它们可能会优化为数组。
for ... in
不会枚举未设置的属性。这包括一个跳过值的数组文字,例如[true, , false]
,它将只枚举索引0和2。
- 为什么JavaScript在for循环为3时向所有4发出警报
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- Is onfling available for html, html5
- Setting default onclick behavior for <img> tag in gene
- 我的javascript for循环不起作用
- For循环冻结Javascript
- 如何在for循环中添加事件侦听器
- Javascript setTimeout for an array
- 双“for”循环(循环)
- 引用vue.js中v-for中的上一个值
- javascript for循环不起作用
- for循环中的javascript if语句找不到==
- GWT (or javascript) library for couchDB
- Javascript在for循环中等待处理请求
- Livereload for node.js.有可能吗
- Javascript数组中未定义的值是否使用任何内存或在for in循环中迭代
- 全局与本地 for commonjs 内存钛
- for 循环中的 JavaScript 内存使用情况
- 具有异步功能的 for 循环会耗尽内存
- 如何在for(prop in obj)循环中分配内存,最好的方法是什么