V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
alexrezit
V2EX  ›  JavaScript

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

  •  
  •   alexrezit · 2013-01-27 11:24:58 +08:00 · 3753 次点击
    这是一个创建于 4101 天前的主题,其中的信息可能已经有所发展或是发生改变。
    ref: https://developer.mozilla.org/en-US/docs/DOM/NodeList

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

    附上找到的性能对比图:









    NemoAlex
        4
    NemoAlex  
       2013-01-27 12:38:57 +08:00   ❤️ 1
    @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
        5
    alexrezit  
    OP
       2013-01-27 12:57:49 +08:00
    @NemoAlex
    这个... 浏览器版本啥的还真不用担心. 我这水平也做不了前端, 偶尔写写 Safari 插件给自己用.
    cyberscorpio
        6
    cyberscorpio  
       2013-01-27 18:25:24 +08:00
    @NemoAlex

    forEach 在 firefox 上比自己 for () 遍历要慢一个数量级……
    limon
        7
    limon  
       2013-01-28 09:42:31 +08:00 via iPad
    经验是但凡能用for,尽量用for
    toothpaste
        8
    toothpaste  
       2013-01-28 11:02:21 +08:00
    以前我以为for in 与 for 是一样的,就贪图方便一直用for in,就一直拿到奇怪的东西...
    leohxj
        9
    leohxj  
       2013-05-19 09:45:20 +08:00
    @alexrezit 你这性能对比,是怎么做的?
    alexrezit
        10
    alexrezit  
    OP
       2013-05-19 09:49:47 +08:00
    @leohxj
    搜索出来的... = =
    我可没耐心搞那么多个系统那么多个浏览器做测试.
    leohxj
        11
    leohxj  
       2013-05-19 09:53:53 +08:00
    @alexrezit :) 善用搜索,也是好技能。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2672 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 11:24 · PVG 19:24 · LAX 04:24 · JFK 07:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.