初学者javascript中非常相似的术语之间的逻辑差异
Posted
技术标签:
【中文标题】初学者javascript中非常相似的术语之间的逻辑差异【英文标题】:Logical differences between very similar terms in beginner javascript 【发布时间】:2013-04-14 20:20:50 【问题描述】:这两个术语有什么区别:
if(counter % 4 != 0)
if(counter % 4 == !0)
我看不出任何逻辑差异,但我的电脑有(我 100% 确定我的电脑比我更合乎逻辑)。
感谢所有见解。
【问题讨论】:
【参考方案1】:javascript 中的!
(非)运算符执行类型强制 - 它尝试将值转换为布尔值(真或假)。 JavaScript 中的 0 是 falsy,所以 !0 是 false 的反义词,即 true。
所以你的第一个 if
保持不变:
if(counter % 4 != 0)
但实际上是第二个
if(counter % 4 == true)
这绝对不一样。
编辑:
JavaScript 在使用非严格的 !=
和 ==
运算符(相对于严格的 !==
和 ===
)时也会进行类型强制,所以在这种情况下,如果 counter % 4
变为 1,它将评估为 @ 987654332@ 因为1
是一个真实值。
以下是 JavaScript 中的虚假值列表:http://www.sitepoint.com/javascript-truthy-falsy/
【讨论】:
请注意,== true
上的类型强制将是 ToNumber()
(6-7 of 11.9.3),导致 == 1
而不是测试counter % 4
的真实性 .
很好的解释和有用的额外见解。谢谢先生。【参考方案2】:
如果您尝试将代码读取为文本,可能会更有意义:
counter % 4
和not 0
一样吗?
not 0
或 !0
在 Javascript 中给出 true
,所以应该是:
counter % 4
和true
一样吗?
语句的结果取决于counter
的值。请参阅 Google Chrome 的 Javascript 控制台进行说明:
【讨论】:
【参考方案3】:!0 是 1,所以你的条件看起来像这样:
if(counter % 4 != 0)
if(counter % 4 == 1)
【讨论】:
错了。警报(!0 + 2); ==> 3。 if (3 == !0) alert('yes'); ==> 什么都没有。 if (3) alert('yes'); ==> 'yes'.!0 + 2
⇒ 3,但仅仅是因为 true + 2
⇒ 3。
...所以如果 3 为真且 !0 为真,那么 3 == !0 应该为真,但不是。
这就解释了为什么在进行比较时使用===
和!==
会更好。
@7stud: 3
是真实的,而不是true
。同样的方式''
和0
是虚假的。以上是关于初学者javascript中非常相似的术语之间的逻辑差异的主要内容,如果未能解决你的问题,请参考以下文章