Почему (null == false) и (null == true) оба возвращают false?

Я знаю это null это объект без атрибутов или функций.

Тем не менее, я запутался, почему console.log(null == false); а также console.log(null == true); оба возвращают false.

Каковы правила конвертации между null а также boolean?

4 ответа

Решение

Это потому, что алгоритм сравнения абстрактного равенства требует, чтобы Type(x) или же Type(y) является логическим в выражении x == y тогда логическое значение должно быть приведено к числу через ToNumber, который преобразует true до 1 и false в +0,

Это означает, что любое сравнение true == something или же something == true результаты в 1 == something или же something == 1 (замена true а также 1 с false а также +0 за false).

Тип Null не сравнивается как равный 1 или +0 (на самом деле, значение null сопоставимо только с undefined в АЕСА).

Подробно обсуждаются все виды равенства в JavaScript на MDN, на которые стоит обратить внимание, если вы хотите узнать больше.

Однако, если вы принуждаете null на номер, который принуждают к +0 так +null == false на самом деле возвращается true ,

Добавление к текущему обсуждению. null >= false возвращает true.

Я считаю, что это потому, что это интерпретируется как!(Null

Значение null JavaScript-литерал представляет собой "пустое" значение или "неопределенное". null является одним из примитивных значений JavaScript. Это не равно логическому true и не равно логическому false потому что это значение не определено. Значение null более склонен к ложному, хотя это не так false, Вот почему это называется "фальси" операторы и if (var) { } блок не выполняется, когда var является null,

Ответ: Нет никакого относительного аспекта между нулем и логическим значением.

МДН Источник:-

Значение null является литералом (не может быть таким свойством глобального объекта, как undefined). В API null часто извлекается там, где можно ожидать объекта, но ни один объект не является релевантным. При проверке на null или undefined остерегайтесь различий между операторами равенства (==) и идентичности (===) (преобразование типов выполняется с первым).

// foo does not exist, it is not defined and has never been initialized:
> foo
"ReferenceError: foo is not defined"

// foo is known to exist now but it has no type or value:
> var foo = null; foo
"null"

Разница между нулевым и неопределенным

typeof null        // object (bug in ECMAScript, should be null)
typeof undefined   // undefined
null === undefined // false
null  == undefined // true

Javascirpt|MDN

Другие вопросы по тегам