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