Операции `<`, `>`, `<=` и `>=`, использующиеся для неравенств, упоминаются в
спецификации как "относительное сравнение." Обычно они используются со
значениями, сравниваемыми порядками, как `числа`. Легко понять, что `3 < 4`.
Но `строковые` значения в JavaScript тоже могут участвовать в неравенствах,
используя типичные алфавитные правила (`"bar" < "foo"`).
Как насчет приведения типов? Тут всё похоже на правила в сравнении `==` (хотя
и не совсем идентично! . Примечательно, что нет операций "строгого
неравенства", которые запрещали бы приведение таким же путем как и "строгое
равенство" `===`.
Пример:
_____________________________________________________________
var a = 41;
var b = "42";
var c = "43";
a < b;
// true
b < c;
// true
_____________________________________________________________
Что здесь происходит? В разделе 11.8.5 спецификации ES5 говорится, что, если
оба значения в сравнении `<` являются `строками`, как это было в случае с `b <
c`, то сравнение производится лексикографически (т.е. в алфавитном порядке,
как в словаре), но если одно или оба значения не являются `строками`, как в
случае с `a < b`, то оба значения приводятся к `числу`, и происходит типичное
числовое сравнение.
Самое большое затруднение, в которое вы можете попасть со сравнениями
между потенциально разными типами значений (помните, что нет формы
"строгого неравенства"? — это когда одно из значений не может быть
превращено в корректное число, например:
Do'stlaringiz bilan baham: