[英]Why are these two If-statements not the same?
我剛剛開始學習Javascript。 目前,我正在上在線課程,遇到了我不明白的第一個問題。
我想檢查在Hangman游戲中我還有多少猜測:
const Hangman = function(word, remainingGuesses) {
this.word = word.toLowerCase().split('')
this.remainingGuesses = remainingGuesses
this.guessedLetters = []
}
Hangman.prototype.getPuzzle = function() {
let puzzle = ''
this.word.forEach((letter) => {
if (this.guessedLetters.includes(letter) || letter === ' ') {
puzzle += letter
} else {
puzzle += '*'
}
})
return puzzle
}
視頻中正確的if
語句是這樣的:
Hangman.prototype.makeGuess = function(guess) {
const isUnique = !this.guessedLetters.includes(guess)
const isBadGuess = !this.word.includes(guess)
if (isUnique) {
this.guessedLetters.push(guess)
}
if (isUnique && isBadGuess) {
this.remainingGuesses--
}
}
但這是我在下面編寫if
語句的方式:
Hangman.prototype.makeGuess = function(guess) {
if (!this.guessedLetters.includes(guess)) {
this.guessedLetters.push(guess)
}
if (!this.guessedLetters.includes(guess) && !this.word.includes(guess)) {
this.remainingGuesses--
}
}
如果我以第二種方式執行if
語句,則剩余的猜測將無法正確計算。 你能告訴我有什么區別嗎?
在最后一個示例中,您使用push()
方法更改了guessedLetters
數組。 這可能導致同一數組的includes()
方法產生不同的結果。
如果您將其翻譯為“普通”英語,請嘗試自行取消貶義:
這樣說 如果猜測不在猜測中,則將其添加,第二個條件將自動為假,因為您只是將猜測添加到了猜測列表中,因此它不在不在猜測列表中。
你可以這樣做
if (!this.guessedLetters.includes(guess)) {
this.guessedLetters.push(guess)
if (!this.word.includes(guess)) {
this.remainingGuesses--
}
}
問題在這里:
if (!this.guessedLetters.includes(guess)) {
this.guessedLetters.push(guess)
}
如果this.guessedLetter
不包含guess
,則會將其添加到列表中(使用push
)。
if (!this.guessedLetters.includes(guess)
您剛剛修改了this.guessedLetters
。 因此,現在,當您再次檢查時, guess
始終存在,因此這種情況永遠不會成立。
在您的示例中,嘗試分析guessedLetters
不包含 guess
的情況下的guessedLetters
:
// if the guessedLetters doesn't contain guess ...
if (!this.guessedLetters.includes(guess)) {
// ... then you add it
this.guessedLetters.push(guess)
}
// and it already contains guess so the first clause of the if
// is always false
if (!this.guessedLetters.includes(guess) && !this.word.includes(guess)) {
this.remainingGuesses--
}
在原始模型中,他們首先計算兩個標志isUnique
和isBadGuess
,然后才修改guessedLetters
和remainingGuesses
guessedLetters
。 if
子句然后檢查未修改的guessedLetters
集合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.