为什么条件永远不能满足?它永远不会产生一个弹出窗口,据我所知,一旦x是列表的第3个元素,该弹出窗口就应该显示。

var list = [];
list[0] = "ahhah";
list[1] = "abcdef";
list[2] = "123";

for (var x in list) {
   if (x == "123")
     alert("HA");
}

最佳答案

当使用for..in迭代数组时,您将获得字符串格式的索引。您应该使用普通循环,像这样

for (var i = 0; i < list.length; i += 1) {
   if (list[i] == "123")
     alert("HA");
}


for..in MDN Documentation page引用,


  for..in不应用于遍历索引顺序很重要的Array。数组索引只是具有整数名称的可枚举属性,其他方面与常规Object属性相同。不能保证for ... in将以任何特定顺序返回索引,并且将返回所有可枚举的属性,包括那些具有非整数名称的属性和被继承的属性。
  
  因为迭代的顺序取决于实现,所以在数组上进行迭代可能不会以一致的顺序访问元素。因此,在对访问顺序很重要的数组进行迭代时,最好使用带有数字索引的for循环(或Array.forEach或非标准的for ... of循环)。

09-10 08:54
查看更多