Вопрос сравнения Javascript (null> = 0) - PullRequest
28 голосов
/ 30 июля 2010

Как мне понять это?

null>0
> false

null==0
> false

null>=0
> true

Ответы [ 4 ]

20 голосов
/ 30 июля 2010

Реляционные операторы (>= и <=) выполняют приведение типов (ToPrimitive) с типом подсказки Number, все присутствующие реляционные операторы имеют такое поведение. 1007 *

Вы можете увидеть внутренние детали этого процесса в Абстрактный алгоритм реляционного сравнения .

С другой стороны, оператор Equals (==), если операндом является null, возвращает true, только если другой является null или undefined, нет приведение числового типа.

null == undefined; // true
null == null; // true

Проверьте внутренние детали этого процесса в Абстрактный алгоритм реляционного сравнения .

Рекомендуемые статьи:

4 голосов
/ 30 июля 2010

Операторы относительного сравнения подразумевают числовой контекст, поэтому в этих случаях (>, >=) null преобразуется в число (ноль).

В случае ==однако оба значения рассматриваются как логические значения, и Javascript не считает, что null должно быть равно любым другим значениям «ложного» значения.Это немного странно.Алгоритм равенства для == имеет несколько особых случаев, и null является одним из них.Это только == для себя и undefined.

2 голосов
/ 30 июля 2010

Когда в числовом выражении используется значение null, оно становится равным 0, что объясняет ваши> и> = случаи.

== более тонкий. Неформально ноль не равен нулю, поэтому имеет смысл.

0 голосов
/ 30 июля 2010

Интересно!Похоже, Javascript нужна пара новых операторов идентификации, таких как >== и <==.Хотя я не уверен, что это имело бы большой смысл, учитывая числовые значения > и <.

Это дает ожидаемый результат ...

(null > 0 || null === 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...