mor*_*ous 2 javascript internet-explorer-8
我有以下功能(在IE6中工作,但在IE8中被破坏)
function implode() { var str = '';
for(item in globvars) //<- IE8 wets itself here ...
str+= '\n' + globvars[item]+';';
return str+'\n';
}
Run Code Online (Sandbox Code Playgroud)
这似乎是一个无害的小功能,但IE8非常小心.任何人都可以告诉我如何重写它,以便它在IE8(以及其他浏览器)中工作?
[编辑]
在脚本的开头(即标记之后的第一行,我已经定义了像这样的globvars:
var globvars = new Array(); // This should give globvars global scope
Run Code Online (Sandbox Code Playgroud)
IE8的错误是:
对象不支持此操作
bob*_*nce 10
我的脚本中的任何其他位置都没有变量命名项
但是,您将使用id="item"或具有元素name="item".IE镜与一个id /名称不一样的元素document.item,但也window.item.(显然依靠这两种方法都是不好的做法.)
因此,当你说item=没有告诉它你想要一个时var,愚蠢的IE认为你正在尝试分配给现有的HTMLElement,并且该id/name位于其中window,并因为元素不可写而抛出适合.这是var即使对全局变量也始终使用的一个原因.
您不应该使用for...in迭代数组.它不符合你的想法.它可能以错误的顺序返回数组项,并可能返回意外的非数字属性.始终使用普通旧for (var i= 0; i<array.length; i++)循环来获取数组中的项目; for...in仅用作Object映射.
无论如何,JavaScript的内置功能join()几乎可以为您完成:
function implode() {
return '\n'+globvars.join(';\n')+';\n';
}
Run Code Online (Sandbox Code Playgroud)