Почему интервальное сравнение не является бомбой в JavaScript?
if (-1 < x < 1) {
console.info('x: ', x)
}
Почему нам разрешено делать это без ошибок?
Также кажется, что:
-1 < x < 1 верно для x<=-11 < x < 1 верно для x<=1-1 < x < -1 всегда ложь-2 < x < 2 всегда правдаВ последних двух случаях кажется, что это просто сравнение двух концов выражений. Как оцениваются эти выражения?
Что вам действительно нужно, так это -1 < x && x < 1
@HerrSerker Я знаю, как делать правильные сравнения, я просто спрашивал, как JS оценивает то, что на других языках называется интервальным сравнением.
Я знал это. Но было бы интересно другим людям, которые хотят знать, как это делается правильно.



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


Поскольку JavaScript допускает неявное приведение типов, в данном случае от логического к числовому. Результатом -1 < x является логическое значение, которое затем неявно приводится к числу (истина = 1, ложь = 0) для части (result) < 1. Так:
Когда -1 < x ложно, вторая часть - это 0 < 1, что верно.
Когда -1 < x истинен, вторая часть - это 1 < 1, что ложно.
Это описано в алгоритме абстрактное реляционное сравнение в спецификации и различных операциях, с которыми он связан.
-1 < x < -1 is always false -2 < x < 2 is always trueIn the last 2 cases it seems it is just comparing the 2 ends of the expressions. How are those expressions evalued?
Использование x = -1 и x = 1:
x = -1, то -1 < x ложный, а остальное - 0 < -1, что неверно.x = 1, то -1 < 1 истинно, а остальное - 1 < -1, что ложно.x = -1, то -2 < -1 истинно, а остальное - 1 < -2, что ложно.x = 1, то -2 < 1 истинно, а остальное - 1 < -2, что ложно.Я думаю, что это происходит потому, что javascript неявно считает, что true имеет значение 1, а false - значение 0.
Когда вы делаете -1 < x < 1, на самом деле вы делаете (-1 < x) < 1 или true < 1, если x = 0, то есть false.
Однако, если x=-2, (-1 < x < -1) вернет true, поскольку false < 1 - это true. Надеюсь это поможет.
Подробнее об этом можно прочитать здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators
Причина в том, что JS интерпретирует ваше выражение.
if ((-1 < x) < 1) {
console.info('x: ', x)
}
Пробуем использовать брекеты ...
Они оцениваются как
(-1 < x) < 1, что эквивалентно(-1 < x) != trueили!(-1 < x).