Это потому, что Abstract Equality Comparison Algorithm требует, чтобы, если Type(x)
или Type(y)
это логическое значение в выражении x == y
то логическое значение должно быть принуждение к номеру через ToNumber
, которое преобразует true
- 1 и false
- +0
.
Это означает, что любое сравнение true == something
или something == true
результатов в 1 == something
или something == 1
(замена true
и 1
с false
и +0
для false
).
The Null type не сравнивается ни с 1, ни с +0 (по сути, нуль сравним только с undefined
в AECA).
Существует подробное обсуждение всех различных форм равенства в JavaScript на MDN, на которые стоит обратить внимание, если вы хотите узнать больше.
Однако, если вы принуждать null
к ряду это coerced to +0
так +null == false
фактически возвращает true
.
Они оба равны нулю, потому что ложь не равно истинным или ложным. Точно так же, как '1' не равно« пицце »или' {} '. При использовании в одиночном режиме в выражениях типа if он принуждается к логическому false, потому что он является значением false –
Null является литералом, а false является логическим, может быть и то, и другое является несравнимым типами –
, потому что JavaScript –