Прежде всего: я знаю, что это не то, как следует проводить сравнение, это просто интересный вопрос. Допустим, вы проводите такое сравнение:
var x = 0;
if (1 < x < 3) {
console.info("true");
} else {
console.info("false");
}
Что происходит внутри этого оператора if, чтобы на выходе было «истина»? Происходит какое-то неявное логическое сравнение. А как мне узнать?
Обратите внимание, что вы получите true при любом значении x. На самом деле это не проверка ничего полезного.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Сравнение происходит слева направо, поэтому 1 < x < 3 будет оценивать как
Сначала 1 < x, который представляет собой false, при условии, что x представляет собой 0. Вот следующее сравнение,
false < 3, который будет true, потому что будет неявное преобразование типа false в числовое представление, которым является 0. Итак, выражение оценивается как 0 < 3, то есть true.
Следовательно, когда вы выполняете true < 3 или false < 3, тогда это логическое значение будет неявно преобразовано в 0 как false и 1 как true.
Согласно Спецификация языка ECMAScript® 2018, (7.2.14) этот тип сравнения выполняется следующим образом:
7.2.14 Abstract Equality Comparison If Type(x) is the same as Type(y), then
Return the result of performing Strict Equality Comparison x === y.
If x is null and y is undefined, return true.
If x is undefined and y is null, return true.
If Type(x) is Number and Type(y) is String, return the result of the comparison x == ! ToNumber(y).
If Type(x) is String and Type(y) is Number, return the result of the comparison ! ToNumber(x) == y.
If Type(x) is Boolean, return the result of the comparison !ToNumber(x) == y.
If Type(y) is Boolean, return the result of the comparison x == ! ToNumber(y).
If Type(x) is either String, Number, or Symbol and Type(y) is Object, return the result of the comparison x == ToPrimitive(y).
If Type(x) is Object and Type(y) is either String, Number, or Symbol, return the result of the comparison ToPrimitive(x) == y.
Return false.
А также:
7.1.3 ToNumber ( argument ): If argument is true, return 1. If argument is false, return +0.
(жирный мой)
Так:
(1 < 0 ) < 3
false < 3
0 < 3
true
Он сравнивает результат
1 < xс3…