indexOf returns -1 表示单词的第一个字母

indexOf returns -1 for the first letter of a word

我正在尝试制作一个简单的刽子手游戏。 我将应该猜到的单词记录到控制台(游戏结束后将被删除。) 现在我试图让玩家猜测这个字母是否在单词中,如果是,它应该会自己显示出来。

但是我这里的问题是:我用的是indexOf()。 单词的第一个字母是-1而不是0, 不在单词中的字母也是-1。 所以我无法真正检查它是否是一个可用的字母,因为第一个字母总是 returns -1。我添加了屏幕截图以使其更加清晰。

注意 'H' 是单词的第一个字母:Hond。 以及警报框如何表示它位于 -1 的索引处。

这是我使用的函数:

function guessLetter(letter){
    var letterVal = letter.value;

    alert(rand.indexOf(letterVal));
}

rand是用来存储随机词的变量。

The first letter of the word is -1 instead of 0

没有。单词的第一个字母由索引 0 表示。如果 indexOf 在字符串 Hond 中没有找到字母 h,那有不同的原因:它使用区分大小写的比较。在这种情况下产生 -1 是正确的结果。

对于不区分大小写的搜索,只需确保所有字母的大小写相同:

alert(rand.toLowerCase().indexOf(letterVal.toLowerCase()) > -1
   ? "It's there"
   : "It's not there");

为了揭示猜出的字母,indexOf 似乎不是正确的工具。最好使用类似

的东西
var rand = "Hond";

var guesses = [];
for ( /* every guess */ ) {
    guesses.push(guess.toLowerCase());
    var revealed = "";
    for (var i=0; i<rand.length; i++)
        if (guesses.indexOf(rand[i].toLowerCase() > -1)
            revealed += rand[i];
        else
            revealed += "_";
    }
    show(revealed);
}

如果您的搜索区分大小写,则 'Hond' 中没有 'h'。点击 'o' 会显示什么?它应该显示 1.

尝试将单词转换为大写或小写,然后进行比较。