Javascript 为什么这两个If语句不一样?
我刚开始学习Javascript。目前我正在参加一个在线课程,我遇到了我不理解的第一个问题 我想看看我在一个刽子手游戏中还有多少猜测:Javascript 为什么这两个If语句不一样?,javascript,if-statement,Javascript,If Statement,我刚开始学习Javascript。目前我正在参加一个在线课程,我遇到了我不理解的第一个问题 我想看看我在一个刽子手游戏中还有多少猜测: const Hangman=函数(单词,剩余猜测){ this.word=word.toLowerCase().split(“”) this.remainingGuesses=remainingGuesses this.guessedLetters=[] } Hangman.prototype.getPuzzle=函数(){ 让益智=“” this.word.f
const Hangman=函数(单词,剩余猜测){
this.word=word.toLowerCase().split(“”)
this.remainingGuesses=remainingGuesses
this.guessedLetters=[]
}
Hangman.prototype.getPuzzle=函数(){
让益智=“”
this.word.forEach((字母)=>{
如果(此.猜测字母.包括(字母)| |字母==''){
拼图+=字母
}否则{
拼图+='*'
}
})
返回谜题
}
视频中正确的if
语句如下:
Hangman.prototype.makeGuess=函数(guess){
const isUnique=!this.guessedLetters.includes(guess)
const isBadGuess=!this.word.includes(guess)
如果(是唯一的){
这个。猜字母。推(猜)
}
if(isUnique&&isBadGuess){
这是我的猜测--
}
}
下面是我如何编写if
语句的:
Hangman.prototype.makeGuess=函数(guess){
如果(!this.guessedLetters.includes(guess)){
这个。猜字母。推(猜)
}
如果(!this.guessedLetters.includes(guess)&&!this.word.includes(guess)){
这是我的猜测--
}
}
如果我以第二种方式执行
if
语句,其余的猜测计算不正确。您能告诉我区别是什么吗?在上一个示例中,您使用push()
方法更改了guessedLetters
数组。
这可能会导致同一数组的includes()
方法产生不同的结果
如果您用“普通”英语翻译,请尝试自行取消声明:
if (!this.guessedLetters.includes(guess)) {
this.guessedLetters.push(guess)
if (!this.word.includes(guess)) {
this.remainingGuesses--
}
}
在上一个示例中,通过使用
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
)
您刚刚修改了这个。猜字母。现在,当你再次检查时,guess
总是存在,所以这个条件永远不会成立 问题在于:
if (!this.guessedLetters.includes(guess)) {
this.guessedLetters.push(guess)
}
如果this.guessedLetter
未包含guess
,则会将其添加到列表中(使用push
)
您刚刚修改了这个。猜字母。现在,当你再次检查时,guess
总是存在,所以这个条件永远不会成立 在您的示例中,尝试分析猜测字母不包含猜测的情况的流程:
// 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
。if
子句检查未修改的guessedLetters
集合。在您的示例中,尝试分析guessedLetters
不包含guess
的情况的流程:
// 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
。if
子句检查未修改的guessedLetters
集合。在代码中,在调用includes()的第二个if
中。但是,第一个if
可能已经推送了字母,因此includes()
调用的结果不同。在工作代码中,检查是在修改数组之前完成的。@epascarello否,为什么?Hi@P.Walko-如果您想查看代码执行中的步骤,此JS可视化工具非常有用。它将帮助您更好地了解每一步的进展情况,并有望帮助您调试程序。在代码中,在第二个if
中调用includes()
。但是,第一个if
可能已经推送了字母,因此includes()
调用的结果不同。在工作代码中,检查是在修改数组之前完成的。@epascarello否,为什么?Hi@P.Walko-如果您想查看代码执行中的步骤,此JS可视化工具非常有用。它将帮助您更好地了解每一步的进展情况,并有望帮助您调试程序。