【问题标题】:Is there ever a reason to write "if (myBoolean == true)" in a JavaScript conditional?有没有理由在 JavaScript 条件中写“if (myBoolean == true)”?
【发布时间】:2012-11-06 11:35:19
【问题描述】:

许多初学者程序员写if (myBoolean == true) 之类的东西,而不是if (myBoolean),因为他们还没有理解条件不需要包含比较,只是一个布尔值。当我在 twitter 上注意到这一点时,有人建议我在 JavaScript 中可能有充分的理由这样做。在那儿?我们都知道 JavaScript 类型很奇怪,但谷歌在这一点上没有给出任何答案。

更新:似乎没有区别,但是与if (myBoolean === true) 会有区别。因此,为了澄清这个问题 - 如果 (myBoolean === true) 或 if (myBoolean),JavaScript 的最佳实践是什么。在什么实际情况下,您会检查 === true 到您不知道是布尔值的东西吗?请在此后续问题中回答:Why is it good practice to use if (myBoolean === true) in JavaScript?

【问题讨论】:

  • 在某些情况下,指出您明确依赖设置为 true 的布尔“标志”值这一事实会很有帮助。把它完整地写出来会稍微清楚一些。另外,也许您的意思是if (myBoolean === true)?那实际上不等于if (myBoolean);仅当 myBoolean 实际设置为 true 时才为真,使其更安全。
  • 这只是个人喜好。现在如果你说的是myBoolean === true,那就另当别论了。
  • @Kiyura:“把它完整地写出来会稍微清楚一些。” 我不同意,我发现它不太清楚。所以这显然是主观的,受个人喜好的影响。同意=== 会有所不同。
  • 请查看我的更新 - 我正在尝试找出您为什么要检查 === true 以获得“真实”值
  • @Iain:请不要更改您的问题。一定要澄清它,但不要改变它。您的原始问题已得到解答。如果您想问另一个问题(为什么要使用===),请单独提出

标签: javascript if-statement boolean type-conversion


【解决方案1】:

没有。

由于您使用的是non-strict equality operator,因此两者之间绝对没有区别:

if (myBoolean == true)

还有:

if (myBoolean)

如果您使用严格相等运算符 ===myBoolean 实际上不是布尔值,则会有所不同。

【讨论】:

  • 澄清一下,如果 myBoolean 不是 true 而是 Javascript 所称的“真实值”之一,例如 5'leeroy'{Some: 'object'},然后是 if (myBoolean)if (myBoolean == true) 都为真,而if (myBoolean === true) 为假。前两者会将值强制为布尔值;实际上与说!!myBooleannew Boolean(myBoolean) 相同。
  • 你什么时候需要/想要/最终检查不是布尔值的 === true ?
  • @Iain,首先,布尔值和布尔对象是有区别的;其次,如果你对没有布尔值的东西做了=== true,它总是错误的。我不太确定你在问什么。
  • @lain,举个例子,假设你写了一个函数,它接受一个参数,这个参数要么是布尔值 true 要么是一个任意字符串(这在 jQuery 和 jQuery 中经常发生)用户界面)。您需要严格的 === 运算符来检查参数是否实际上是布尔值 true,因为在布尔上下文中非空字符串也会计算为 true
  • @FrédéricHamidi,在这种特殊情况下,使用typeof 可能会更好
【解决方案2】:

如果要检查的是一个真实布尔值(真/假),而不仅仅是具有真实性质的东西,你不应该浪费你的时间比较它与真或假。

您的变量应该以布尔方式命名,例如isFinishedhasMoreRecords,以便可以读取语句:

if (!finished) ...
if (moreRecordsLeft) ...
if (userHasLostTheirSanity) ...

等等。

将布尔值与真/假进行比较的问题在于它只会生成另一个布尔值,并且没有确定的停止位置:

if (!((userIsMad == true) == true) = false) ...

【讨论】:

  • 这完全是我的观点 - 我刚刚在 Twitter 上看到大量 cmets 说“是的,但是 javascript”。所以问题就变成了,为什么在 javascript 中你最终需要测试不是真正布尔值的“真实”值。
猜你喜欢
  • 1970-01-01
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
  • 2017-09-18
  • 2012-07-18
相关资源
最近更新 更多