Почему (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