假值前的感叹号在if条件下如何工作

how Exclamation mark before a falsy value works in if condition

提问人:MarlonB 提问时间:11/11/2022 最后编辑:MarlonB 更新时间:11/11/2022 访问量:85

问:

我在观看项目教程时发现了这一点。

let isGameOver = false;

if(!isGameOver){
console.log('game goes on.')
}
if(isGameOver){
console.log('game over')
}

在这个块内,似乎“!”并没有否定isGameOver的回归。 它更像是:所以为什么它没有将 isGameOver 纳到真实的值,比如if(isGameOver == false){...} //they are working functionally same. if(!isGameOver){....}

 if(isGameOver == true) 
javascript if 语句 条件语句

评论


答:

0赞 Scott Marcus 11/11/2022 #1

它正在按应有的方式工作。首先,要明白,使用逻辑 NOT 运算符 ( 不会更改它前面的项的值 - - 它会创建一个新值,仅在该表达式中使用。换句话说,在一个表达式中使用后,该变量的值在将来的表达式中保持不变。如果要更改变量的值,可以编写:.!isGameOverisGameOver = !isGameOver;

您的变量设置为 initial,然后检查它 (not),这意味着 .由于总是,第一个将触发。然后,您的第二个测试针对(变量值)进行测试,并且由于 is never ,第二个测试不会触发:false!truetruetrueconsoloe.log()falsefalsetrueconsole.log()

let isGameOver = false;

// Check to see if the opposite of isGameOver (false) is true (which it is):
if(!isGameOver){
  console.log('game goes on.')
}

// Check to see if isGameOver is true (which it isn't):
if(isGameOver){
  console.log('game over')
}

评论

0赞 MarlonB 11/12/2022
谢谢你的回答。我想我对变量名称isGameOver感到困惑,因为它最初设置为false,也许将其更改为isGameRunning更好?所以代码将是:let isGameRuning = false;if(!isGameRunning){//游戏继续//}} if(isGameRunning){//游戏结束//}
0赞 Scott Marcus 11/12/2022
@shawnx 你应该称它为任何合乎逻辑的东西。这没有错,因为任何一个的价值都会提供信息。不要忘记投票给所有有用的答案,并考虑将此答案标记为“该”答案。isGameOverisGameRunning
0赞 Philip I 11/11/2022 #2

!否定该值。

因此,如果 “isGameOver” 为 false,则 “!isGameOver” 为 “true”,这就是为什么它在第一个 if 中传递 true 条件的原因。