满足条件时的奇怪变量行为

时间:2013-12-20 20:17:46

标签: javascript jquery xml

我正在编写 JS 代码,该代码读取 XML文件并从中提取所需信息,我想找到所选项目的名称< / em>,这是我的代码:

function initialize() {
    ct = $('menu').children().length;

    for(cati=0;cati<=ct-1;cati++) {
        cats[cati] = $('menu').children().eq(cati).prop('nodeName');
    }

    var selecteditem = $(".selected").text();

    for(j=0;j<=cats.length;j++) {
        if(selecteditem == realnames[j]) {
                selecteditem = cats[j];
        }
    }

    $("#gallery").empty();
    alert($('menu').find(selecteditem).prop('nodeName'));
}

这里在我的代码中使用最后一个stmt进行警报时有两种情况,第一种情况是if statement条件没有实现,在这种情况下警报给了我所需的结果(所选项目),但当if statement条件达到时,警报会给我undifined,但我确定cats[j]是XML文件中的元素。

1 个答案:

答案 0 :(得分:1)

至少你的for循环看起来很奇怪

// Always use them like this
for (var i = 0;i < arr.length;i++){
    // do stuff with arr[i]
}

请参阅你的第一个for循环

for (var i = 0;i <= arr.length-1;i++){
    // do stuff with arr[i]
}

在第二个

for (var i = 0;i <= arr.length;i++){
    // do stuff with arr[i]
}

你应该坚持一种方式宣布for loops。如果仅使用arr.length运算符来比较i和arr.length,则无需从<减少。不是<=运营商。在你的第二个循环中,你将超出数组的范围。


你到达那里的另一个奇怪的事情。当你遍历猫阵列时。

for(j=0;j<=cats.length;j++) {
    if(selecteditem == realnames[j]) {
            selecteditem = cats[j];
    }
}

您正在使用realNames[]数组的迭代器j引用cats[]数组。虽然理论上如果你总是在2个不同的数组中得到相同数量的cats[]realNames[]并且你从不对它们进行排序,它们总是真的相互映射1对1,但这种方法很容易受到影响。对于错误,这看起来不像是一种可靠的方式。当然,for循环超出范围。如前所述。