在Javascript中,A ==!B始终与A!= B相同

luc*_*uda 3 javascript logic boolean-logic boolean-expression

重构一些旧代码,我发现了以下内容:

someVar == !otherVar
Run Code Online (Sandbox Code Playgroud)

这看起来并不清晰,我认为可以写成:

someVar != otherVar
Run Code Online (Sandbox Code Playgroud)

这样做似乎是合乎逻辑的.但是,由于这是Javascript,我担心附带问题,所以这真的没问题吗?

Aza*_*tes 6

答案是否定的.

Infinity == !NaN; // false
Infinity != NaN; // true

'abc' == !false; //false
'abc' != false; // true
Run Code Online (Sandbox Code Playgroud)

打开一个控制台,亲自检查一下.还有更多的例子.


Me.*_*ame 5

实际上,这些陈述本身就是非常不同的.!aVar将该var强制为布尔值.eg '!0'= true,'!1'或任何其他数字将为false.其他一些例子 !''= true !'abc= false.

!= 做一个宽松的(in)平等比较,它取决于类型转换可能会有非常不同的结果.

例如

5 != 6 //true
5 == !6 //false -> !6 is forced to a boolean (6=true,!6 = false), for the comparisson 5 is cast to a boolean (true), so the comparisson nets false
5 != 5 //false
5 == !5 //false, but because the same reason as above !5 becomes true, etc.
Run Code Online (Sandbox Code Playgroud)

可能你提到的旧代码使用这个完全是为了加粗otherVar.如果someVar已经是布尔值,那么这样做是有意义的.对于所有其他比较,它可能会给出错误的结果.