0

为什么javascript会返回这种类型的错误:

TypeError: Cannot use 'in' operator to search for 'active' in undefined

当我做这样的事情时

foo = [ 
          {link:"http1", active:"true"}, 
          {link:"http2", active:"true"}, 
          {link:"http3"}  
      ]

    var checker = function(){

        for(i=0; i<= foo.length; i++){ 
            if('active' in foo[i]){
                checked = true
            }
        }
    }

但是当我在控制台中使用相同的 foo 对象执行此操作时

'active' in foo[0]

它返回true?

4

1 回答 1

2

错误表示表达式foo[i]未定义 - 因为,表达式确实结果为未定义。(提示:i = 4)。

微不足道,这个问题是可以重现的'active' in undefined,不需要循环。

在这种情况下,原因是循环的条件不正确:它应该是i < foo.length,所以i是 0..3 而不是 0..4。

代码可能还应该使用本地i(感谢 RobG!)、a break(设置检查时)、从函数返回值(而不是使用假定的全局)和/或替换为Array.some.

现在也关闭为“印刷错误”..

于 2014-09-05T23:54:50.670 回答