gpt4 book ai didi

javascript - javascript中的类数组对象

转载 作者:数据小太阳 更新时间:2023-10-29 04:46:53 25 4
gpt4 key购买 nike

通过 Closure 库中的 dom.js 源代码,我发现了这个(在 goog.dom.getElementsByTagNameAndClass_ 中):

if (opt_class) {
var arrayLike = {};
var len = 0;
for (var i = 0, el; el = els[i]; i++) {
var className = el.className;
// Check if className has a split function since SVG className does not.
if (typeof className.split == 'function' &&
goog.array.contains(className.split(' '), opt_class)) {
arrayLike[len++] = el;
}
}
arrayLike.length = len;
return arrayLike;
}

在常规数组上执行此操作有什么好处?

最佳答案

代码的作者使用空 JavaScript 对象作为类数组对象的基础,即可以通过索引访问并具有长度属性的对象。

我能想到的可能有两个原因:

  1. 内存使用 - 如果数组由分配 n 个元素的实现支持,当它达到它的限制时,它会增长一些因素以增加它的容量,从而浪费 capacity - length 内存
  2. cpu 时间 - 实现者选择插入速度而不是随机访问速度 - 与随机访问相比,此方法的返回更有可能被顺序迭代,并且在插入时调整数组大小会导致分配 - 复制 - 释放,这会导致 cpu 损失

我敢打赌,类似的代码会在其他 JavaScript 库中找到,这是基准测试和寻找最适合不同浏览器的解决方案的结果。

在 Justin 发表评论后编辑

进一步谷歌搜索后,发现类数组对象在 JavaScript 开发人员中很常见:查看 JavaScript:David Flanagan 的权威指南,它有一个完整的 sub-chapter on Array-like objects .还有 these guys提及他们。

没有提到为什么人们更喜欢类数组对象而不是数组对象。这可能是一个很好的 SO 问题。

因此第三种选择可能是关键:遵守 JavaScript API 的规范。

关于javascript - javascript中的类数组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1971389/

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