У меня только тривиальный вопрос.
Почему undefined == undefined возвращает true, но undefined >= undefined есть false?
undefined равно undefined.
Но он не равен или больше?
У меня только тривиальный вопрос.
Почему undefined == undefined возвращает true, но undefined >= undefined есть false?
undefined равно undefined.
Но он не равен или больше?
Оператор >= фактически является отрицанием <. И оба ссылаются на Abstract Relational Comparison Algorithm, который возвращает undefined для undefined >= undefined, как определено в шаге 3 (a-c). На самом деле вы также можете видеть, что операторы с более высоким (-или-равным) и меньшим (-или-равным) предназначены только для работы с номерами или строками.
Затем в 6. шаге спецификации оператора >= вы можете увидеть, почему он возвращает false:
Если
rистинно или undefined, верните false. В противном случае верните true.
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" и получать результаты, которые вы могли получить только тогда, когда вы сравнили два целых числа на большинстве других языков.
Вопросы и обсуждение более приветствуются, чем прямое голосование. Спасибо.
Операторы неравенства (<, > и т.д.) не могут использоваться для сравнения значений, которые не могут быть неявно преобразованы в числа. Это включает undefined. Причина того, что вы видите, заключается в том, что в отличие от других языков, которые вызывают ошибку, если вы попытаетесь сделать что-то вроде этого в любом случае (т.е. TypeError в python), JS позволяет вам это сделать. Однако результат всегда будет ложным.