【问题标题】:How come string wont match when using for in loop in javascript在javascript中使用for in循环时为什么字符串不匹配
【发布时间】:2014-04-30 14:09:50
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript arrays string for-loop string-matching


    【解决方案1】:

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

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

    引用for..in MDN Documentation page

    for..in 不应用于迭代索引顺序很重要的数组。 数组索引只是具有整数名称的可枚举属性,在其他方面与一般 Object 属性相同。无法保证 for...in 会以任何特定顺序返回索引,并且会返回所有可枚举属性,包括具有非整数名称的属性和继承的属性。

    因为迭代的顺序取决于实现,所以迭代数组可能不会以一致的顺序访问元素。因此,在遍历访问顺序很重要的数组时,最好使用带有数字索引的 for 循环(或 Array.forEach 或非标准 for...of 循环)。

    【讨论】:

    • for (var i = 0, listLength = list.length; i &lt; listLength; i++)保存list.length的不断重新计算。
    【解决方案2】:

    for..in 将使用 key 填充 x - 而不是值。它通常用于对象而不是数组。

    for (var x in list) {
        //x = 0 / 1 / 2
        if (list[x] == "123")
            alert("HA");
    

    【讨论】:

      猜你喜欢
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-05
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      相关资源
      最近更新 更多