【问题标题】:Javascript Result of expression is not an objectJavascript 表达式的结果不是对象
【发布时间】:2011-09-07 11:52:53
【问题描述】:

用它来摆脱一个恼人的小“供电”盒子,但它一直在说 'TypeError: 表达式'divs[i]' [undefined] 的结果不是一个对象。' 我该如何解决。

function damnwhitebox()
{
 var myBody = document.getElementsByTagName("body")[0];
 divs = myBody.getElementsByTagName("div");
    for(var i in divs)
    {
        if(divs[i].style.zIndex === 99999)
        {
            divs[i].style.display == "none";
        }
        if(divs[i].style.zIndex === "1000")
        {
            divs[i].style.display == "none";

        }
    }   
}

【问题讨论】:

    标签: javascript typeerror


    【解决方案1】:
        function damnwhitebox()
        {
         var myBody = document.getElementsByTagName("body")[0];
         divs = myBody.getElementsByTagName("div");
            for(var i =0 ; i <divs.length; i++ )
            {
                if(divs[i].style.zIndex === 99999)
                {
                    divs[i].style.display = "none";
                }
                if(divs[i].style.zIndex === 1000)
                {
                    divs[i].style.display = "none";
                    alert(divs[i].innerHTML);
    
                }
            }   
        }
    

    这会奏效。在您的代码中,您混合了 for in 和 for 循环的语法。使用这个。

    For ... in 旨在与对象一起使用以迭代其属性。如果您打算将它与数组一起使用,您必须检查您没有向元素添加新属性。所以最好避免使用这种语法进行数组遍历。
    而且你不应该在 DOM 数组上使用它(就像在这种情况下),因为许多 JavaScript 库确实扩展了 DOM。

    【讨论】:

    • 他们没有混合语法但是使用 for...in 将返回的不仅仅是数组索引
    • 这是有效的,因为它在索引元素 0...N 之间循环。如果您使用for (var i in divs) 循环,那也将尝试迭代 divs.length (number) 和 divs.item (function)
    • divs[i].style.display == "none";仅评估真实性删除“=”以进行分配。
    【解决方案2】:

    另外,您可能希望将 == 更改为 =

    divs[i].style.display = "none";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-10
      • 2019-08-07
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      • 2013-11-10
      • 1970-01-01
      相关资源
      最近更新 更多