![](/img/trans.png)
[英]For JS strings, is a.localeCompare(b) === 0 always the same as 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'
=真, '!1'
或任何其他数字将为假。 其他一些例子!''
= 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.
可能你提到的旧代码使用这个完全是因为boolifying otherVar
。 如果someVar已经是布尔值,那么这样做是有意义的。 对于所有其他比较,它可能会给出错误的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.