73 lines
2.8 KiB
Plaintext
Raw Normal View History

== Why is this an issue?
In JavaScript, there are two types of comparison operators: strict and non-strict.
2020-06-30 12:47:33 +02:00
* Strict operators: These operators compare both value and type. They are represented as `===` (strict equality) and `!==` (strict inequality). For example, `5 === "5"` would return `false` because, although the values are the same, the types are different (one is a number, the other is a string).
2020-06-30 12:47:33 +02:00
* Non-Strict operators: These operators compare only value, not type. They are represented as `==` (equality) and `!=` (inequality). For example, `5 == "5"` would return `true` because the values are the same, even though the types are different.
2020-06-30 12:47:33 +02:00
It's generally recommended to use strict operators in JavaScript to avoid unexpected results due to JavaScript's type coercion. This is because non-strict operators can lead to some counter-intuitive results. For example, `0 == false` would return `true`, which might not be the expected outcome.
[source,javascript,diff-id=1,diff-type=noncompliant]
----
function checkEqual(a, b) {
if (a == b) { // Noncompliant: using non-strict equality '=='
return "Equal";
} else {
return "Not equal";
}
}
2020-06-30 12:47:33 +02:00
console.log(checkEqual(0, false)); // Output: "Equal"
----
You should use the strict equality and inequality operators to prevent type coercion, avoid unexpected outcomes when comparing values of different types, and provide more predictable results.
[source,javascript,diff-id=1,diff-type=compliant]
2020-06-30 12:47:33 +02:00
----
function checkEqual(a, b) {
if (a === b) {
return "Equal";
} else {
return "Not equal";
}
}
console.log(checkEqual(0, false)); // Output: "Not equal
2020-06-30 12:47:33 +02:00
----
=== Exceptions
The rule does not report on these cases:
* Comparing two literal values
* Evaluating the value of `typeof`
* Comparing against `null`
== Resources
=== Documentation
* MDN web docs - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Strict_equality[Strict equality]
* MDN web docs - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Strict_inequality[Strict inequality]
* MDN web docs - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Equality[Equality]
* MDN web docs - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Inequality[Inequality]
* MDN web docs - https://developer.mozilla.org/en-US/docs/Glossary/Type_coercion[Type coercion]
* MDN web docs - https://developer.mozilla.org/en-US/docs/Glossary/Truthy[Truthy]
* MDN web docs - https://developer.mozilla.org/en-US/docs/Glossary/Falsy[Falsy]
ifdef::env-github,rspecator-view[]
'''
== Implementation Specification
(visible only on this page)
include::../message.adoc[]
'''
== Comments And Links
(visible only on this page)
include::../comments-and-links.adoc[]
endif::env-github,rspecator-view[]