Как я должен понять их?
null>0
> false
null==0
> false
null>=0
> true
Операторы отношения (> =
и <=
) выполняют приведение типов ( ToPrimitive
) с типом подсказки Number
], все присутствующие реляционные операторы имеют такое поведение.
Вы можете увидеть внутренние детали этого процесса в The Abstract Relational Comparison Algorithm .
С другой стороны, оператор Equals ( ==
), если операнд null
, он возвращает только true
, если другой - либо null
, либо undefined
, принуждение числового типа не выполняется.
null == undefined; // true
null == null; // true
Проверьте внутренние детали этого процесса в The Abstract Relational Comparison Algorithm .
Рекомендуемые статьи:
Интересно! Похоже, что для Javascript нужна пара новых операторов идентификации, например > ==
и <==
. Хотя я не уверен, что это имело бы смысл, учитывая числовые значения >
и <
.
Это дает ожидаемый результат ...
(null > 0 || null === 0);
Операторы относительного сравнения подразумевают числовой контекст, поэтому в этих случаях (>
, > =
) null
преобразован в число (ноль).
Однако в случае ==
оба значения обрабатываются как логические значения, и Javascript не считает, что null
должно быть равно любым другим «ложным» значениям. Это как-то странно. Алгоритм равенства для ==
имеет множество особых случаев, и null
является одним из них. Это только ==
самому себе и undefined
.
Когда в числовом выражении используется null, он принимает значение 0, что объясняет ваши случаи> и> =.
== более тонкий. Неофициально, null - это не то же самое, что ноль, поэтому в этом есть смысл.