初学者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 % 4not 0一样吗?

not 0!0 在 Javascript 中给出 true,所以应该是:

counter % 4true一样吗?

语句的结果取决于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中非常相似的术语之间的逻辑差异的主要内容,如果未能解决你的问题,请参考以下文章

R中非常大的矩阵计算有效

Scala中的列表可以添加元素吗?

Node.js内存泄漏分析

Windows 10 中非常慢的 git clone

微信小程序开发中非常需要注意的点!!!

JavaScript 词法静态动态作用域初级理解