null != null 🥹
Чем больше погружаешься в специфику JavaScript, тем логичнее кажется, что null != null должно давать true: «не равно», два «ничего», разве одно отсутствие значения равно другому? По факту выходит false. По спецификации так и должно быть.
В ECMAScript оператор == задан операцией IsLooselyEqual (7.2.13). Если типы у двух значений одинаковые, то для == используется тот же результат, что и для строгого равенства (IsStrictlyEqual, 7.2.14). Для null с null тип один, значит возвращается то же, что у null === null. А null === null по спецификации даёт true: в SameValueNonNumber (7.2.11) для null и undefined сразу возвращается true.
🌱 Тогда null == null даёт true, а null != null, как отрицание ==, даёт false.
Интуиция «два ничего - не равны» понятна, но в JS оба значения одного типа Null и по правилам равенства считаются равными. #js
· 13.03
На самом деле, внутри js все те же обычные типы и операции. null это ссылка на объект, равная 0. Нулевые ссылки есть практически в каждом (не эзотерическом) языке. И все эти нулевые ссылки всегда равны 0, никаких проблем. Для NaN ситуация другая. Во-первых, бинарное представление NaN в стандарте ieee 754 определено только для экспоненты, мантисса может быть любой. То есть, уже может быть несколько разных NaN. Во-вторых, NaN может быть получено разными путями, не только 0/0 или Infinity/Infinity. Если бы результаты разных операций вдруг становились равны, мы бы устали ошибки искать
ответить
коммент удалён
· 13.03
Спасибо за крутой коммент, в стандарты не лез, но как будто прочитал продолжение к посту, всё логично 🫡
ответить
ответ удалён