У меня только тривиальный вопрос.
Почему 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 позволяет вам это сделать. Однако результат всегда будет ложным.