Странное поведение JavaScript: когда null одновременно и больше, и меньше нуля

Недавно мы рассмотрели случай, когда СУБД MySQL начинает вести себя странно, портит данные и не генерирует при этом сообщение об ошибке. В этот раз о забавной странности языка JavaScript.

Сюрпризы JavaScript

Следует сразу сказать, что это не глюк — этот фокус работает и в Google Chrome, и в Mozilla Firefox. Более того, такое поведение соответствует спецификации языка. И всё же... Откройте консоль вашего браузера и напечатайте:


null > 0;
null == 0;
null >= 0;

Попробуйте сначала отгадать результаты сравнений самостоятельно, а потом посмотрите на правильные ответы ниже:

JavaScript: null and zero

Казалось бы, полное отсутствие логики. null не больше нуля и не равен ему, но null больше или равен нулю. У разработчиков языка поехала крыша?

Нет. Вот тут спец по JS накатал 5-страничное исследование и объяснение. Если говорить кратко, операторы сравнения используют разные алгоритмы: Abstract Relational Comparison Algorithm и Abstract Equality Comparison Algorithm, которые дают разные результаты. В рамках своих задач они дают правильные и логичные результаты, но когда разные операторы используются в одном контексте, то и случаются такие сюрпризы.
field_vote: 
Ваша оценка: Нет Средняя: 4.3 (3 оценки)
Языки программирования: 

Комментарии

Минус на минус дает плюс, так и сдесь false и false выходит true. Все логично)

Админ, рисуй капчи нормально, фиг угадаешь что написано..

Оценка: 
Средняя: 5 (3 оценки)

Да... с капчей тут просто издеваются над народом, видно посетители не нужны

Оценка: 
Средняя: 3.7 (3 оценки)

Комментировать

Filtered HTML

  • Use [fn]...[/fn] (or <fn>...</fn>) to insert automatically numbered footnotes.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <blockquote> <strike> <code> <h2> <h3> <h4> <h5> <del> <img>
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.