Почему (null == false) и (null == true) оба возвращают false?
Я знаю, что null
- объект без атрибутов или функций.
Однако я смущен тем, что console.log(null == false);
и console.log(null == true);
возвращают false.
Каковы правила преобразования между null
и boolean
?
Ответы
Ответ 1
Это потому, что Абстрактный алгоритм сравнения равенства требует, чтобы 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 (фактически, нуль сравним только с undefined
в AECA).
Существует подробное обсуждение всех различных видов равенства в JavaScript на MDN, на которые стоит обратить внимание, если вы хотите узнать больше.
Однако, если вы принуждаете null
к числу, которое принуждено к +0
, поэтому +null == false
фактически возвращает true
.к югу >
Ответ 2
Ответ: Нет никакого относительного аспекта между нулевым и логическим.
MDN Источник: -
Значение null является литералом (не является свойством глобального объекта, такого как undefined может быть). В API, нуль часто извлекается на месте, где объект можно ожидать, но объект не подходит. При проверке null или undefined остерегайтесь различий между равенствами (==) и identity (===) (преобразование типа выполняется с помощью бывший).
// 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"
Разница между нулем и undefined
typeof null // object (bug in ECMAScript, should be null)
typeof undefined // undefined
null === undefined // false
null == undefined // true
Javascirpt | MDN
Ответ 3
Добавление к текущему обсуждению. null >= false возвращает true.
Я считаю, что это потому, что это интерпретируется как! (null < false)
Ответ 4
Значение null является литералом JavaScript, представляющим "пустое" значение или "undefined". null является одним из примитивных значений JavaScript. Он не равен логическому истинному и не равен логическому false, потому что это значение undefined. Значение null больше склоняется к false, даже если оно не является "ложным". Вот почему его называемые "фальшивые" операторы и блок if (var) {} не выполняется, когда var имеет значение null.