Javascript 对于IE11中的in-loop

Javascript 对于IE11中的in-loop,javascript,internet-explorer,Javascript,Internet Explorer,IE 11中的控制台 镀铬控制台 如果我将循环中的“item”改为“anotherItem”,如下所示 var obj = { id1: 'item 1', id2: 'item 2', id3: 'item 3' }; for (anotherItem in obj){ console.log(anotherItem); } 这个循环运转良好 为什么IE 11不处理单词“item”item在IE中被定义为本机函数,并且可能是只读的,因此您无法更改其

IE 11中的控制台

镀铬控制台

如果我将循环中的“item”改为“anotherItem”,如下所示

var obj = {
    id1: 'item 1',
    id2: 'item 2',
    id3: 'item 3'    
};
for (anotherItem in obj){
    console.log(anotherItem);
}
这个循环运转良好


为什么IE 11不处理单词“item”

item
在IE中被定义为本机函数,并且可能是只读的,因此您无法更改其值

在Edge之前,微软不喜欢遵守标准,并引入了标准中没有的各种功能。Edge中不存在
功能

另外,您还没有声明另一个项目,请尝试以下操作:

试试这个:

var obj = {
    id1: 'item 1',
    id2: 'item 2',
    id3: 'item 3'    
};

for (var anotherItem in obj){
    console.log(anotherItem);
}
如果您没有使用
var
keywork声明变量,并且您没有处于严格模式,那么它将被定义为全局变量(这不是您想要的)。全局变量本质上是全局对象的属性,在web浏览器的上下文中,它就是
窗口
对象

将以下内容添加到JS文件的顶部以启用严格模式,那么您将无法首先犯这些错误,因为将引发异常

"use strict";
您还可以选择为特定功能启用严格模式,如下所示:

(function() {
    "use strict";
    // code here is in strict mode
})()

您可以将此示例用于旧浏览器。祝你好运

var fruits = ["apple", "orange", "cherry"];
fruits.forEach(myFunction);

function myFunction(item, index) {
   document.getElementById("demo").innerHTML += index + ":" + item + "<br>";
}
var水果=[“苹果”、“橘子”、“樱桃”];
果实。forEach(myFunction);
函数myFunction(项目、索引){
document.getElementById(“demo”).innerHTML+=index+“:“+item+”
”; }
也许我没有完全正确地提出这个问题,但我意识到它是本机的,但我不理解他们为什么这样做,以及它的答案Microsoft在Edge之前在遵循web标准方面非常糟糕。这就是其他浏览器没有的随机函数的原因。您应该在问题中编写代码,而不是像您在问题中附加的图像那样。
for(var item in obj){console.log(item);}
应该像expectedOP询问的那样,通过对象属性而不是数组元素进行迭代。