2014-12-24 2 views
22

Я знаю, что null - объект без атрибутов или функций.Почему (null == false) и (null == true) оба возвращают false?

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

Каковы правила преобразования между null и boolean?

+5

Они оба равны нулю, потому что ложь не равно истинным или ложным. Точно так же, как '1' не равно« пицце »или' {} '. При использовании в одиночном режиме в выражениях типа if он принуждается к логическому false, потому что он является значением false –

+0

Null является литералом, а false является логическим, может быть и то, и другое является несравнимым типами –

+4

, потому что JavaScript –

ответ

32

Это потому, что 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.

+0

Большое спасибо, у меня другая путаница, я знаю, что 'isNaN (null)' равно 'false' и 'Number (null)' равно '0', почему null coercible to 'undefined' not' 0' – iatboy

+0

'null' и' undefined' эквивалентны в этом случае, скорее всего, потому что они являются единственными двумя элементами в JS, которые не могут обрабатывать какой-либо доступ к свойствам. '(0) .toString() ===" 0 ", но' (null). Anything приводит к 'TypeError'. –

+0

Полный ответ см. На странице https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness – stevemao

0

Значение null является литералом JavaScript, представляющим «пустое» значение или «неопределенное». null является одним из примитивных значений JavaScript. Он не равен boolean true и не равен boolean false, потому что его значение не определено. Значение null более склонно к ложному, хотя оно не false. Вот почему он называется «ложными» операторами, а блок if (var) { } не выполняется, когда var - null.

+0

'var' не следует использовать как имя переменной, так как это зарезервированное слово. пример должен сказать 'someVar' вместо' var'. – SherylHohman

+0

Не путайте значение «..its is undefined» со значением 'undefined'. Лучше сказано, что «... значение неизвестно». – SherylHohman

2

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

MDN Источник: -

Значение нуль является буквальным (не свойством глобального объекта, как неопределенных может быть). В API-интерфейсах нуль часто извлекается на месте, где можно ожидать объекта , но объект не имеет значения. При проверке на 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

+3

Возможно, вам следует уточнить, какие части этого ответа вы взяли у источника и какие части вы написали сами. См. Http://stackoverflow.com/help/referencing – BoltClock

1

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

Я считаю, что это потому, что это интерпретируется как! (Нуль < ложь)

Смежные вопросы