我一直在摆弄这种方式太长时间,似乎无法让它按预期工作。 我遇到的问题是我在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是我似乎总是遇到麻烦的事情。
答案 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 。 (这是我使用谷歌浏览器测试的行为。)