javascript - 为什么这两个 If 语句不一样?

标签 javascript if-statement

我刚刚开始学习Javascript。目前我正在参加在线类(class),我刚刚遇到了我不明白的第一个问题。

我想检查我在 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 语句,则剩余的猜测无法正确计算。你能告诉我有什么区别吗?

最佳答案

问题出在这里:

if (!this.guessedLetters.includes(guess)) {
    this.guessedLetters.push(guess)
}

如果 this.guessedLetter 不包含 guess,则会将其添加到列表中(使用 push)。

if (!this.guessedLetters.includes(guess)

您刚刚修改了 this.guessedLetters。所以现在,当你再次检查时,猜测总是存在,所以这个条件永远不会成立。

关于javascript - 为什么这两个 If 语句不一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53557750/

相关文章:

javascript - 如何在 Meteor.js 中显示我的示例列表?我做错了什么以及如何解决它?

php - PHP 中的 VB if 语句

javascript - 使用 anchor 位置的 if 语句激活样式

c - 在 C 中将 var 赋值给 var

javascript - 在 CSS 中设置表格列宽(如有必要,JavaScript)

javascript - Javascript 中的年份验证

c - if 语句在 C 中不起作用

javascript - 比较两个对象数组并过滤结果

javascript - 这段代码是否容易受到 XSS 攻击? (表单自动发布)

javascript - 使用正则表达式按部分查找完整单词