数组中的元素被indexOf忽略

时间:2012-02-18 23:46:23

标签: javascript

我有以下功能。一切都有效,除了评论中提到的'if'语句。

function markRow(e) {
    var row = e.currentTarget.value ;

    var id, rid, field, color, ico ;

    rid = markedrows.indexOf(row) ;
    if (rid != -1) {
        markedrows.splice(rid, 1) ;
        ico = ICO_FOLDER + ICO_PLUS ;
        color = COLOR_UNMARKED ;
    } else {
        markedrows.push(row) ;
        ico = ICO_FOLDER + ICO_MINUS ;
        color = COLOR_MARKED ;
    }

    e.currentTarget.src = ico ;

    for (var col = 1 ; col <= current.cols() ; col++) {
        alert(col) ;
        alert(markedcols.toString()) ;
        // This 'if' doesn't seem to work
        if (markedcols.indexOf(col) == -1) {
            // This part is ALWAYS executed even when the column is in markedcols
            // I get no error messages in firefox
            id = "r" + row + "c" + col ;
            field = document.getElementById(id) ;
            field.style.background = color ;
        }
    }

    markedrows.sort(numericalorder) ;
}

alert用于调试,它们清楚地表明markedcols确实包含了应该包含的列,但indexOf似乎没有抓住它。

据我所知,所有现代浏览器,特别是firefox现在支持数组上的indexOf,所以我完全迷失了。我一遍又一遍地经历了代码的逻辑,它应该工作。它只是没有。

1 个答案:

答案 0 :(得分:3)

我认为你的问题在于:

["1"].indexOf(1) === -1; // true

所以你可能需要.indexOf(col.toString())

虽然"1" == 1,但.indexOf似乎与===进行比较。 V8 does, at least.

修改 ===确实应该使用same的状态:

  

searchElement成为将严格等同比较算法应用于elementKsame的结果。

     

如果truek,请返回{{1}}。