Rule: strict-comparisons
Only allow comparisons between primitives.
Rationale
When using comparison operators to compare objects, they compare references and not values.
This is often done accidentally.
With this rule, >, >=, <, <= operators are only allowed when comparing numbers.
===, !== are allowed for number string and boolean types and if one of the
operands is null or undefined.
Notes:
Config
One of the following arguments may be optionally provided:
allow-object-equal-comparisonallows!===!=====comparison between any types.allow-string-order-comparisonallows><>=<=comparison between strings.
Config examples
"strict-comparisons": true
"strict-comparisons": [
true,
{
"allow-object-equal-comparison": false,
"allow-string-order-comparison": false
}
]
Schema
{
"type": "object",
"properties": {
"allow-object-equal-comparison": {
"type": "boolean"
},
"allow-string-order-comparison": {
"type": "boolean"
}
}
}
Code examples:
Disallows usage of comparison operators with non-primitive types.
"rules": { "strict-comparisons": true }
Passes
const object1 = {};
const object2 = {};
if (isEqual(object1, object2)) {}
Fails
const object1 = {};
const object2 = {};
if (object1 === object2) {}
Allows equality operators to be used with non-primitive types, while still disallowing the use of greater than and less than.
"rules": { "strict-comparisons": [true, { "allow-object-equal-comparison": true }] }
Passes
const object1 = {};
const object2 = {};
if (object1 === object2) {}
Fails
const object1 = {};
const object2 = {};
if (object1 < object2) {}
Allows ordering operators to be used with string types.
"rules": { "strict-comparisons": [true, { "allow-string-order-comparison": true }] }
Passes
const string1 = "";
const string2 = "";
if (string1 < string2) {}
Fails
const object1 = {};
const object2 = {};
if (object1 < object2) {}