js为什么其他{}被执行?

时间:2013-11-19 22:18:40

标签: javascript loops

需要你的帮助。得到了这段代码,但不确定为什么我的else语句被执行,即使“if”符合要求。有人可以解释一下吗? 而且,有人可以指出我正确的方向..每次我输入一封信,无论它是否正确,它都被打印到猜测字母列表,我不知道如何停止打印它8次? 我已经保存了我的代码,如果这更容易:http://jsfiddle.net/5NfYj/

function guess(){
        output = '';
        userLetter = document.forms[0].letter.value;
        document.forms[0].letter.value = '';

        for(var c=0;c<theWord.length;c++){
            if(userLetter === letters[c]){
                display[c] = userLetter;
                win--;
            }else { 
                wrongGuess.push(userLetter);
                document.forms[0].guessedLetters.value = wrongGuess; 
                }

            output = output + display[c] + ' ';
        }

        document.forms[0].result.value = output;    
    }

3 个答案:

答案 0 :(得分:1)

JavaScript字符串比较区分大小写。如果我在输入中放入一个小写字符,我可以使它工作,但如果我放一个大写字符,它将不会进入,因为你的for循环只是将它与小写字符进行比较。您可以使用.toLowerCase()方法转换输入值,以便即使用户输入大写字母也能正常工作。

小提琴:http://jsfiddle.net/5NfYj/1/

注意:正如@ daniel0mullins指出的那样,添加错误猜测的逻辑将运行8次,因为它位于for循环内。您应该使用一个表示它是否错误的标志,并在完成循环后将其添加到列表中。检查他的答案,了解如何解决这个问题。

答案 1 :(得分:1)

它正在显示多个猜测,因为你循环遍历整个单词。试试这个:

function guess(){
        output = document.forms[0].result.value;
        userLetter = document.forms[0].letter.value;
        document.forms[0].letter.value = '';
        var guessInWord = false;

        for(var c=0;c<theWord.length;c++){
            if(userLetter === letters[c]){
                display[c] = userLetter;
                var newOutput = output.split('');
                newOutput[c] = userLetter;
                output = newOutput.join('');
                guessInWord = true;
                win--;
            }                   
        }

        if(!guessInWord) {
           wrongGuess.push(userLetter);
           document.forms[0].guessedLetters.value = wrongGuess;
        }

        document.forms[0].result.value = output;    
    }

这样它只会在检查整个单词后推送到wrongGuess数组,而不是在每个字母后面。

查看此fiddle

答案 2 :(得分:1)

请参阅http://jsfiddle.net/5NfYj/3/

        for(var c=0;c<theWord.length;c++){
            if(userLetter === letters[c]){
                display[c] = userLetter;
                win--;
            }

            output = output + display[c] + ' ';
        }
        wrongGuess.push(userLetter);
        document.forms[0].guessedLetters.value = wrongGuess; 

例如,当我输入a时,您的代码将遍历apetiser的所有8个字符。它匹配第一个字符并在框中显示,但是对于所有其他字符,它会选择else分支,因此会在猜测框中显示7次。