indexOf()> -1 vs indexOf()!= -1

时间:2017-12-20 19:05:58

标签: javascript

我正在阅读Beginning JavaScript,在第10章中有一个练习:

 var myImages = [
        "usa.gif",
        "canada.gif",
        "jamaica.gif",
        "mexico.gif"
    ];

    function changeImg(e) {
        var el = e.target;
        var newImgNumber = Math.round(Math.random() * 3);

        while (el.src.indexOf(myImages[newImgNumber]) != -1) {
            newImgNumber = Math.round(Math.random() * 3);
        }

        el.src = myImages[newImgNumber];
    }

    function updateStatus(e) {
        var el = e.target;
        var status = document.getElementById("status");

        status.innerHTML = "The image changed to " + el.src;

        if (el.src.indexOf("mexico") > -1) {
            el.removeEventListener("click", changeImg);
            el.removeEventListener("click", updateStatus);
        }
    }

    var imgObj = document.getElementById("img0");

    imgObj.addEventListener("click", changeImg);
    imgObj.addEventListener("click", updateStatus);

为什么他们在这里使用!= -1

while (el.src.indexOf(myImages[newImgNumber]) != -1) {

> -1在这里:

if (el.src.indexOf("mexico") > -1) {

使用-1令我感到困惑。

3 个答案:

答案 0 :(得分:2)

使用-1是因为如果数组中不存在搜索到的值,indexOf操作将返回-1

至于为什么他们在一个地方使用!= -1而在另一个地方使用> -1可能是一名编辑在工作中失败。

答案 1 :(得分:1)

看看this

“如果要搜索的值永远不会发生,则此方法返回-1。”

您引用的行是条件,如果元素实际位于数组中,则满足条件。

答案 2 :(得分:1)

如果搜索不在字符串中,则indexOf返回-1。这是因为indexOf将返回字符串中搜索词的位置。例如

> -1是另一种表达!== -1的方式,尽管我个人更喜欢后者。

var test = 'testing';
test.indexOf('test'); // returns 0 which is falsy
test.indexOf('st'); // Returns 2
test.indexOf('foo'); // returns -1

阵列也一样。

希望有助于回答为什么-1!