继续在for循环中丢失增量变量

时间:2014-07-10 20:18:02

标签: javascript

我一直在摆弄这种方式太长时间,似乎无法让它按预期工作。 我遇到的问题是我在for循环中丢失了增量变量的值,特别是当它进入我内部的if语句时。理想情况下,我想迭代一个数组,直到找到正确的值,将变量附加到该值并在for循环之外使用它。这是我正在使用的数组的结构。

var dXId = [
 {url:"url1", dId:"id1"},
 {url:"url2", dId:"id2"},          
 {url:"url3", dId:"id3"}
];

这是我正在运行一切的循环:

for(i=0; i < dXId.length; i++) {
    if (dXId[i].url == currentUrl){
    var dataXuId = dXId[i].dId;
    break;
    }

}

增量'i'变量总是在if语句中恢复为0。奇怪的是,dXId [i] .url正确显示,但dXId [i] .dId拉出第一个条目,之后“i”似乎丢失了。我确信有一个非常简单的解决方案,但javascript是我似乎总是遇到麻烦的事情。

2 个答案:

答案 0 :(得分:4)

您在for循环中设置了dXId [i] .url = currentUrl,而不是与&#39; ==&#39;进行比较。这可能是问题的一部分。

修改

正如Eric所建议的那样......

==运算符是松散地比较事物的价值,===是严格比较事物的价值和类型。

实施例: 给定x = 10;

x == '10'  // true
x == 10    // true
x === '10' // false
x === 10   // true

答案 1 :(得分:1)

你的if语法错误了......你要将currentUrl的值赋给变量dXId[i].url

if (dXId[i].url = currentUrl){

...

}

应将其更改为===以比较字符串值。

if (dXId[i].url === currentUrl){

...

}

之后,它有效!此处的示例: js fiddle

因此,JavaScript让我们首先做这些事情是相当有趣的:在if块中绝对不允许为变量赋值。

例如,请考虑以下代码段:

var foo = 1, // change to 0 and console.log will not be displayed
    bar;     // undefined

// Assigning value of foo to bar
if (bar = foo){

    // Will print out 1
    console.log("bar is: " + bar);

}

输出到控制台后将导致打印:

  

栏是:1

原因是if (bar = foo){等于if (1){,允许程序在if块内继续:) ...如果foo的值为0,则不会显示console.log 。 (这是我使用谷歌浏览器测试的行为。)

js fiddle

中的示例