簡體   English   中英

為什么這兩個If陳述不相同?

[英]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()方法產生不同的結果。

如果您將其翻譯為“普通”英語,請嘗試自行取消貶義:

  1. 如果猜測不在猜測列表中,請將其添加到猜測列表。
  2. 如果猜測不在猜測列表中且不在單詞列表中,請減少剩余的猜測

這樣說 如果猜測不在猜測中,則將其添加,第二個條件將自動為假,因為您只是將猜測添加到了猜測列表中,因此它不在不在猜測列表中。

你可以這樣做

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--
}

在原始模型中,他們首先計算兩個標志isUniqueisBadGuess ,然后才修改guessedLettersremainingGuesses guessedLetters if子句然后檢查未修改的guessedLetters集合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM