Mat*_*hew 7 javascript google-closure-library
通过Closure库查看dom.js源代码,我发现了这个(in 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;
}
Run Code Online (Sandbox Code Playgroud)
在常规阵列上执行此操作会有什么好处?
代码的作者使用空 JavaScript 对象作为类数组对象的基础,即可以通过索引访问并具有 length 属性的对象。
我能想到的原因可能有两个:
capacity - length内存我敢打赌,类似的代码也会在其他 JavaScript 库中找到,并且这是基准测试和寻找跨不同浏览器的最佳解决方案的结果。
贾斯汀评论后编辑
进一步谷歌搜索后发现,类似数组的对象在 JavaScript 开发人员中很常见:查看 JavaScript:David Flanagan 的权威指南,它有一整章关于类似数组的对象。这些 人也提到了他们。
没有提及为什么人们应该更喜欢类似数组而不是数组对象。这可能是一个很好的问题。
因此第三个选项可能是关键:遵守 JavaScript API 的规范。
| 归档时间: |
|
| 查看次数: |
1818 次 |
| 最近记录: |