Mozilla 的标准说 getElementsByTagName 和 getElementsByClassName 返回的都是 NodeList, 但是前者可以用 for-in 遍历后者却不行, 这是为什么呢?

2013-01-27 11:24:58 +08:00
 alexrezit
ref: https://developer.mozilla.org/en-US/docs/DOM/NodeList

后者只能用 for loop 或者 forEach.
3928 次点击
所在节点    JavaScript
11 条回复
NemoAlex
2013-01-27 12:03:57 +08:00
都是不可以用 for in 来遍历的
est
2013-01-27 12:12:09 +08:00
for in 就不是用来遍历list的。。。是用来便利object的
alexrezit
2013-01-27 12:25:44 +08:00
@NemoAlex
试了一下果然是我搞错了. 谢谢.
@est
我太菜了... > <

附上找到的性能对比图:









NemoAlex
2013-01-27 12:38:57 +08:00
@alexrezit 前端的话,其实不太需要关注性能,各种浏览器内核做的优化都不同
一般大多数人是用 for 循环:
for (var i=0; i < Things.length; i++) { Things[i] };
也有人喜欢反过来遍历:
for (var i = Things.length - 1; i >= 0; i--) { Things[i] };
当然 forEach 是最方便的:
Things.forEach(function(thing){ thing });
这个在低版本浏览器上会有问题,一般前端框架会解决
所以如果是用框架的话,就放心大胆地用 forEach 吧
alexrezit
2013-01-27 12:57:49 +08:00
@NemoAlex
这个... 浏览器版本啥的还真不用担心. 我这水平也做不了前端, 偶尔写写 Safari 插件给自己用.
cyberscorpio
2013-01-27 18:25:24 +08:00
@NemoAlex

forEach 在 firefox 上比自己 for () 遍历要慢一个数量级……
limon
2013-01-28 09:42:31 +08:00
经验是但凡能用for,尽量用for
toothpaste
2013-01-28 11:02:21 +08:00
以前我以为for in 与 for 是一样的,就贪图方便一直用for in,就一直拿到奇怪的东西...
leohxj
2013-05-19 09:45:20 +08:00
@alexrezit 你这性能对比,是怎么做的?
alexrezit
2013-05-19 09:49:47 +08:00
@leohxj
搜索出来的... = =
我可没耐心搞那么多个系统那么多个浏览器做测试.
leohxj
2013-05-19 09:53:53 +08:00
@alexrezit :) 善用搜索,也是好技能。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/58928

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX