另一个未捕获的类型错误::无法读取属性'替换'的未定义

Yet Another Uncaught TypeError: : Cannot read property 'replace' of undefined

本文关键字:属性 未定义 替换 读取 类型 另一个 错误      更新时间:2023-09-26

我正在编写一些JS代码来切换某些DOM元素的类。一切都在正常工作,但我也遇到了这个错误阻止执行后面的代码。

我添加了一个检查,以确保元素数组不会像我想的那样为空这就是问题所在。但错误仍然存在。当调用replace时,调试总是显示old_name的值。我是不是缺少了JS风格的东西?

这是导致错误的代码部分,特别是第31行:


  if (w > MOBILE_THRESHOLD) {
    responsive_elements = document.getElementsByClassName("desktop");
    if (responsive_elements.length > 0) {
      for (i in responsive_elements) {
        var old_name = responsive_elements[i].className;
        var new_name = old_name.replace("desktop", "mobile");
        responsive_elements[i].className = new_name;
      }
    }

必要时,我会乐意提供更多的代码,或任何需要的信息。谢谢

永远不要使用for...in循环来迭代类似数组的对象

在这种情况下,HTMLCollection具有类似于itemnamedItem的可枚举属性。访问这些不会返回HTML元素,因此className将是未定义的。

为了正确迭代,您可以使用以下之一

for(var i=0; i<responsive_elements.length; ++i) {
  // ...
}

[].forEach.call(responsive_elements, function(element, index, collection) {
  // ...
});