所以我正在编写一个大型 AJAX 控件类,我遇到了一点好奇。
为了便于交流,假设我在初始化时将页面的所有元素添加到一个数组中。
当有人执行启用 AJAX 的链接时,后续方法会用从 AJAX 调用收到的内容替换指定的内容部分。
然而,假设当此 AJAX 调用完成并替换内容部分内的节点时,先前存储在数组中的节点现在为 null 或未定义(或任何表示已死...(不是 javascript 大师, 清楚地 ))。
当我再次遍历数组中的所有节点时会发生什么?这些元素不再存在了吗?或者它们仍在消耗旧索引的空间,但现在无法访问?
这似乎是一个有点愚蠢的问题,但实际上我只是想看看是否有任何检测和垃圾收集发生在 javascript 数组中的“死”元素上。
谢谢和干杯。
最佳答案
如果你在 javascript 中的数组中有一个 DOM 节点,然后将其从 DOM 中删除(例如,在你的 ajax 调用之后),该节点将继续存在于数组中,并继续占用空间。如果需要,您可以稍后再次将其添加到 DOM。
如果您不再将它添加到 DOM,而是将数组中的项目设置为其他一些值,例如 null 或 undefined,假设没有剩余的对该元素的引用,它将被垃圾收集并且没有更长的空间。
值得牢记的是,javascript 数组与 NodeList
或 HTMLCollection
之间存在差异。您可以通过调用一些 DOM 方法(例如 document.getElementsByTagName
)来获取节点列表。 NodeLists 看起来有点像数组,但保持“事件”状态,因此如果从 DOM 中删除一个节点,它也会从 NodeList
中删除。
关于javascript - 当它在 javascript 中变为 null 时,数组元素会变成什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20687383/