javascript - 即,javascript 和 'item' 作为变量名

标签 javascript cross-browser

这是否被认为是 IE 中的 JS 错误?

请检查以下功能

function select_deselect_all_items(status)
    {
        select_deselect_items_under_panel(status, $('myPanel'));

        panel = $('myPanel');
        var items = panel.getElementsByTagName('input');
        for (var n = 0; n < items.length; n++) {
            item = items[n];
            if (item.id.substr(0, 10) == 'myItems_') {
                item.checked = status;
                select_deselect_items_under_panel(status, $('myPanel'));
            }
        }
    }

现在,这在 FF 和 Chrome 中工作正常,但在 IE 中生成错误。错误如下:

错误:无法获取属性“substr”的值:对象为 null 或未定义

我在我的代码中的几个地方都有这个函数(不幸的是,没有把它放在一个 js 文件中),我已经偶然发现了这个问题。问题似乎出在 item 变量上。如果将其更改为其他内容,即 myWildVarName,一切似乎都正常。我在 IE 中调试页面,我看到 item 是一个具有某些属性的对象......

那么,是错误还是菜鸟错误?

干杯

最佳答案

您的代码确实有一个错误,因为您从未声明 item 变量,因此成为 Horror of Implicit Globals 的牺牲品。 .

我的猜测是您的页面上有一些东西具有 nameid “item”,因此它正在成为 window< 的属性 因为 IE 这样做(许多其他浏览器也效仿)。您可能知道,window 的属性是全局属性,因此当您尝试在函数中分配给 item 符号时,您就是在分配给该全局属性。根据 item 是什么,IE 可能会尝试应用“实际上不分配给对象,而是分配给它的默认属性”逻辑(因为如果它想使用,它可以这样做宿主对象)并遇到问题。

声明您的局部变量(总是一个好主意),问题就会消失。


更新:既然您已经发布了实际错误,上面关于所发生事情的基本原理可能并不准确,但建议(声明本地)保持不变。 :-)

关于javascript - 即,javascript 和 'item' 作为变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6435677/

相关文章:

javascript - 建立一个依赖 javascript 的网站仍然是不好的做法吗?

html - CSS+HTML : How to draw table/cell border

javascript - 在 Vanilla 中切换风格

javascript - 将鼠标悬停在文本上时,文本会下降然后返回

javascript - Selenium 没有注册按钮按下

javascript - 在 <video> 元素上播放多个音轨?

html - 跨浏览器问题。链接在 Safari 中不显示,但在 Mozilla 中有效

javascript - 关闭后更改并保存信息窗口内的内容

php - PHP/CodeIgniter 有什么方法可以读取 URL,就像 site.com/#/xyz ...?

Javascript:访问 iframe 内容时出现难以理解的行为