JS вложенная логика оператора if работает не так, как предполагалось

#javascript

Вопрос:

 function decideWinner() {

comChoice = generateComputerChoice();
userChoice = "Rock";

    if (userChoice === comChoice) {
        console.log("game drew");
    } else {
        if (userChoice === "Rock" amp;amp; comChoice === ("Scissor" || "Lizard")) {
            console.log("you win")
        } else if (userChoice === "Paper" amp;amp; comChoice === "Rock" || "Spock") {
            console.log("you win")
        } else if (userChoice === "Scissors" amp;amp; comChoice === "Paper" || "Lizard") {
            console.log("you win")

        } else if (userChoice === "Lizard" amp;amp; comChoice === "Spock" || "Paper") {
            console.log("you win")

        } else if (userChoice === "Spock" amp;amp; comChoice === "Scissor" || "Rock") {
            console.log("you win")

        } else {
            console.log("you lose")
        }
    }
}
decideWinner()
 

Выбор создается из другой функции. Выбор пользователя установлен на «Рок», первая часть должна вернуть ничью, если обе одинаковые, а вторая возвращает выигрыш или проигрыш в зависимости от результата выбора. Но этого не происходит, я получаю ничью, если «Спок» нарисован компьютером, и победу при всех других обстоятельствах.
кто-нибудь может увидеть, что я сделал не так, пожалуйста
?

Комментарии:

1. См. логическое ИЛИ .

2. Вы можете использовать (comChoice === 'Scissor" || commChoice === 'Lizard') или ['Scissor', 'Lizard'].includes(comChoice) .

Ответ №1:

Проблема в том, как вы используете оператор OR ( || ).

Использование val1 || val2 возвращает значение первого, которое является истинным. Таким образом, по сути ("Scissor" || "Lizard") , каждый раз будут возвращаться «Ножницы». То , что вы вместо этого намерены сделать, — это фактически проверить равенство comChoice , поэтому вам следует провести рефакторинг своего кода как такового:

 if (userChoice === comChoice) {
    console.log("game drew");
} else {
    if (userChoice === "Rock" amp;amp; (comChoice === "Scissor" || comChoice === "Lizard")) {
        console.log("you win")
    } else if (userChoice === "Paper" amp;amp; (comChoice === "Rock" || comChoice === "Spock")) {
        console.log("you win")
    } else if (userChoice === "Scissors" amp;amp; (comChoice === "Paper" || comChoice === "Lizard")) {
        console.log("you win")
    } else if (userChoice === "Lizard" amp;amp; (comChoice === "Spock" || comChoice === "Paper")) {
        console.log("you win")
    } else if (userChoice === "Spock" amp;amp; (comChoice === "Scissor" || comChoice === "Rock")) {
        console.log("you win")
    } else {
        console.log("you lose")
    }
}
 

Ответ №2:

Одна проблема, которую я замечаю, связана с вашим оператором или оператором. Проверка comChoice === "Rock" || "Spock" -это не то, чего вы ожидаете.

вместо этого вам нужно проверить это вот так: (comChoice === "Rock" || comChoice === "Spock")

С другой стороны, я бы просто использовал == вместо === этого в вашем случае, так как мы не можем видеть, какой тип данных передается, что может привести к ложным результатам.