search

Home  >  Q&A  >  body text

前端 - JavaScript中,我用for in可以遍历到一个函数的静态方法,而用forEach不能,有哪位大神知道这是为什么呢

如图:

黄舟黄舟2894 days ago445

reply all(4)I'll reply

  • 怪我咯

    怪我咯2017-04-10 15:25:45

    for...in 会遍历对象自身和其原型链上所有可枚举的成员(属性和方法)。

    forEach的说明如下:

    The forEach() method executes a provided function once per array element.

    forEach仅遍历数组元素,即那些可以通过索引访问到的元素。

    另外可以通过break来终止for...in,但没有办法终止forEach。


    补充下:

    要让Array.prototype.forEach在object上调用,需要该对象具有length属性,于是forEach会执行类似的行为:(参考ES5 Spec)

    var i = 0;
    while(i++ < length) {
      if(obj.[[hasProperty]](i.toString()))
        callback.call(...)
    }
    

    所以Array.prototype.forEach可以应用在Argument对象或者是HTMLCollection对象上.

    reply
    0
  • 高洛峰

    高洛峰2017-04-10 15:25:45

    for in 会遍历自身及其原型链上的所有方法。

    有个东西你得知道,叫做hasOwnProperty,它可以将不是自己的变量或函数过滤掉

    最后,建议不要使用for in , 第一是效率很低,第二是如果自己不注意,容易遍历出自己想不到的东西。

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 15:25:45

    js没有foreach这个方法,for就带foreach的功能

    reply
    0
  • ringa_lee

    ringa_lee2017-04-10 15:25:45

    forEach = for
    for != for in

    so
    forEach != for in

    reply
    0
  • Cancelreply