Internet Explorer(7/8)无法通过javascript数组循环

Internet Explorer(7/8)无法通过javascript数组循环,javascript,internet-explorer,internet-explorer-8,internet-explorer-7,Javascript,Internet Explorer,Internet Explorer 8,Internet Explorer 7,我需要用非重音字符替换字符串中的重音字符,我实现了这一点 var defaultDiacriticsRemovalMap=[ {'base':'A','letters':/[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0202\u1EA0\

我需要用非重音字符替换字符串中的重音字符,我实现了这一点

var defaultDiacriticsRemovalMap=[
{'base':'A','letters':/[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0202\u1EA0\u1EA0\u1EA0,
/* ... 
诸如此类
.... */
];
var变化;
功能性除颤器(str){
如果(!更改){
更改=defaultDiacriticsRemovalMap;
}

对于(var i=0;i我不确定这是否是您的问题,因为您没有粘贴整个代码,但我可以肯定,如果在数组的最后一个元素后添加额外的逗号,IE7/8将抛出错误

所以如果你有这样的东西:

var defaultDiacriticsRemovalMap = [
 {'base':'A'},   
 {'k1':'v1'},
 ...
 {'k_last':'v_last'}, // this last comma will break your js in IE7/8
];

我不确定这是否是您的问题,因为您没有粘贴整个代码,但我可以肯定,如果在数组的最后一个元素后添加额外的逗号,IE7/8会抛出错误

所以如果你有这样的东西:

var defaultDiacriticsRemovalMap = [
 {'base':'A'},   
 {'k1':'v1'},
 ...
 {'k_last':'v_last'}, // this last comma will break your js in IE7/8
];

在数组的右括号(]之前有一个额外的逗号(),IE7/8然后向该数组添加一个额外的
未定义的
值,因此当循环使用
进行
迭代时,IE7/8将在索引84处遇到一个
未定义的
值(尝试记录
更改。长度
并查看差异)

在数组的右括号()之前有一个额外的逗号(),IE7/8然后向该数组添加一个额外的
undefined
值,这样当循环使用
进行
迭代时,IE7/8将在索引84处遇到一个
undefined
值(尝试记录
更改.length
并查看差异)

几乎可以肯定,数组中有一个尾随逗号。IE将其视为省略,并在长度中添加一个,从而有效地添加了一个额外的(未定义的)成员。其他浏览器正确地忽略了它。在任何情况下,请删除它

只是为了说明IE如何处理逗号:

var a = [0,1,];

alert(a.length); // 3 in IE, 2 in others

alert(a.hasOwnProperty('2')); // false in all browsers

尾随逗号不是省略,这需要两个尾随逗号。

几乎可以肯定,数组中有尾随逗号。IE将其视为省略并在长度中添加一个,有效地添加了一个额外(未定义)成员。其他浏览器正确地忽略它。在任何情况下,请删除它

只是为了说明IE如何处理逗号:

var a = [0,1,];

alert(a.length); // 3 in IE, 2 in others

alert(a.hasOwnProperty('2')); // false in all browsers

尾随逗号不是省略,需要两个尾随逗号。

严格来说,它将长度增加一,没有额外的元素。但尝试读取不存在的属性会产生相同的结果(它返回未定义的
)。严格地说,它将长度增加1,没有额外的元素。但是尝试读取不存在的属性会产生相同的结果(它返回
未定义的
)。它不会“中断”数组,即错误地将其视为省略并将其添加到长度中。它将在对象文字中引发错误,因为这是ES 3中的语法错误。它不会“打断”数组,即错误地将其视为省略并将其添加到长度中。它将在对象文字中引发错误,因为它是ES 3中的语法错误。