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

Undefined == undefined - true. Но undefined >= undefined является ложным?

У меня только тривиальный вопрос.

Почему undefined == undefined возвращает true, но undefined >= undefined есть false?

undefined равно undefined.

Но он не равен или больше?

4b9b3361

Ответ 1

Оператор >= фактически является отрицанием <. И оба ссылаются на Abstract Relational Comparison Algorithm, который возвращает undefined для undefined >= undefined, как определено в шаге 3 (a-c). На самом деле вы также можете видеть, что операторы с более высоким (-или-равным) и меньшим (-или-равным) предназначены только для работы с номерами или строками.

Затем в 6. шаге спецификации оператора >= вы можете увидеть, почему он возвращает false:

Если r истинно или undefined, верните false. В противном случае верните true.

Ответ 2

undefined === undefined || undefined > undefined и undefined >= undefined, OR в "больше или равно" не совпадает с этим OR ||.

Насколько это важно, операторы сравнения, такие как >, <, >= и т.д., предназначены для чисел, а undefined - не числа, undefined - undefined.

Что вы ожидаете в качестве возвращаемого значения при 10 >= "Hello World"? Конечно, false, но снова 10 >= "10" возвращает true, потому что 10 == "10" - true, а 10 === "10" - false. "10" можно преобразовать в число, чтобы мы увидели результат, который был бы возвращен в случае действительного числа, а не строки с числами.

Нет строгой версии оператора равенства для >= в отличие от !=, которая !==

Некоторые действительно странные и запутывающие вещи случаются, когда вы пытаетесь сравнить null, undefined, NaN - Это то, что спецификация JavaScript может дать ответ, а так как JavaScript - очень слабо типизированный язык, а типы очень гибкие, поэтому можно сравнивать 10 и "10" и получать результаты, которые вы могли получить только тогда, когда вы сравнили два целых числа на большинстве других языков.

Вопросы и обсуждение более приветствуются, чем прямое голосование. Спасибо.

Ответ 3

Операторы неравенства (<, > и т.д.) не могут использоваться для сравнения значений, которые не могут быть неявно преобразованы в числа. Это включает undefined. Причина того, что вы видите, заключается в том, что в отличие от других языков, которые вызывают ошибку, если вы попытаетесь сделать что-то вроде этого в любом случае (т.е. TypeError в python), JS позволяет вам это сделать. Однако результат всегда будет ложным.