在 Javascript 中,A == !B 是否始终与 A != B 相同
In Javascript, is A == !B always the same as A != B
重构一些旧代码,我发现了以下内容:
someVar == !otherVar
看起来不太清晰,我认为可以写成:
someVar != otherVar
这样做似乎合情合理。但是,既然是Javascript,我怕连带问题,这样真的可以吗?
答案是否。
Infinity == !NaN; // false
Infinity != NaN; // true
'abc' == !false; //false
'abc' != false; // true
打开控制台并自行检查。还有很多例子。
其实说法本身就大不相同。 !aVar
将强制该 var 为布尔值。例如'!0'
= true,'!1'
或任何其他数字都将为 false。
其他一些例子 !''
= true !'abc
= false.
!=
进行宽松的(不)相等比较,这取决于类型转换可能会产生非常不同的结果。
例如
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.
可能您提到的旧代码使用这个正是为了布尔化 otherVar
。如果 someVar 已经是布尔值,那么这样做是有意义的。对于所有其他比较,它可能会给出错误的结果。
重构一些旧代码,我发现了以下内容:
someVar == !otherVar
看起来不太清晰,我认为可以写成:
someVar != otherVar
这样做似乎合情合理。但是,既然是Javascript,我怕连带问题,这样真的可以吗?
答案是否。
Infinity == !NaN; // false
Infinity != NaN; // true
'abc' == !false; //false
'abc' != false; // true
打开控制台并自行检查。还有很多例子。
其实说法本身就大不相同。 !aVar
将强制该 var 为布尔值。例如'!0'
= true,'!1'
或任何其他数字都将为 false。
其他一些例子 !''
= true !'abc
= false.
!=
进行宽松的(不)相等比较,这取决于类型转换可能会产生非常不同的结果。
例如
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.
可能您提到的旧代码使用这个正是为了布尔化 otherVar
。如果 someVar 已经是布尔值,那么这样做是有意义的。对于所有其他比较,它可能会给出错误的结果。