JavaScript数组indexOf返回undefined。

3
当调用我的函数checkIss()时,issFullArray.indexOf(issToCheck)总是返回undefined。我已经运行了.length,输出了issFullArray的内容,但我无法弄清楚为什么它不起作用——在我看来,数组看起来很好。如下所示,我已经尝试将issArray明确设置为一个数组,并复制由我的getIssList()返回的数组。
function updateIss() {
    var issArray = [];

    var currService = current.u_business_service;
    var currIss = current.u_is_service;
    issArray = getIssList(currService).slice(); //getIssList() returns an arry
    if (checkIss(issArray, currIss) === false) {
        //do stuff
    }
}

function checkIss(issFullArray, issToCheck) {
    if (issFullArray.indexOf(issToCheck) < 0) {
        return false;
    } else {
        return true;
    }
}

3
你是否在使用支持array.indexOf的浏览器? - adeneo
1
例如,IE <=8不支持Array的indexOf()方法。 - Tim Down
我已经尝试过IE9,Firefox 15和Chrome 24。难道真的有不支持indexOf()的浏览器吗?如果你问我,这有点傻。 - user2042970
将 issArray 的作用域设为全局,并且不要将其传递给 checkIss() 函数,看看是否正常工作。 - asifsid88
谢谢您的评论,但似乎我编写代码的软件不支持indexOf函数。我觉得这样一个简单的函数不被支持有点奇怪,但是没关系,我会提交一个错误报告并看看会发生什么! - user2042970
IE8不支持array.indexOf。 所以尝试这个: https://dev59.com/MnI-5IYBdhLWcg3wpqMK#29003069 - Will V King
1个回答

2
最简单的方法是循环遍历数组,比较每个值,并在有匹配时返回 true,否则返回 false。代码不需要太多,适用于所有浏览器。
function checkIss(issFullArray, issToCheck) {
    for(i=0; i<issFullArray.length; i++) {
        if(issFullArray[i]==issToCheck) {
            return true;
        }
    }
    return false;
}

谢谢ElPedro,看起来我会用到这个! - user2042970

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接