Подтвердить что ты не робот

Вопрос о сравнении Javascript (null >= 0)

Как я должен понимать это?

null>0
> false

null==0
> false

null>=0
> true
4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

== более тонкий. Неофициально null - это не то же самое, что и ноль, поэтому это имеет смысл.

Ответ 4

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

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

(null > 0 || null === 0);