Почему! New Boolean(false) равно false в JavaScript?

Из документации jQuery по типам JavaScript следует следующий фрагмент кода, описывающий поведение строк при преобразовании в логические значения (эта тема не связана с этим вопросом, но именно там я нашел код):

!"" // true
!"hello" // false
!"true" // false
!new Boolean(false) // false

Я получаю первые три примера, но я не получаю последний пример, потому что:

new Boolean(false) == false //true
!false // true

Так что я бы предположил:

!new Boolean(false) // true

Но вместо этого:

!new Boolean(false) // false, mind = blown

Что это я даже не...

Это потому что:

new Boolean(false) === false // false

Если да, то какой цели это служит?

2 ответа

Решение

new Boolean(false) возвращает объект, который не является нулевым. Ненулевые объекты всегда правдивы.

В следствии, ! любого ненулевого объекта всегда будет ложным.


Чтобы доказать это себе, вы можете запустить это в консоли javascript.

(typeof new Boolean(false))  //"object"

Также вы можете использовать strict equality оператор, чтобы подтвердить, что new Boolean(false) не совсем false:

new Boolean(false) === false  // false

Кстати, зовет Boolean функция как функция - без нового - на самом деле возвращает примитив

!Boolean(false) // true

(typeof Boolean(false))  //"boolean"

Так как new Boolean возвращает объект, как указано здесь.

! определяется следующим образом:

11.4.9 Логический оператор НЕ (!)

Производство UnaryExpression: ! UnaryExpression оценивается следующим образом:

  1. Пусть expr будет результатом вычисления UnaryExpression.

  2. Пусть oldValue будет ToBoolean(GetValue(expr)),

  3. Если oldValue true, вернуть false,

  4. Вернуть true,

и:

9.2 ToBoolean

Абстрактная операция ToBoolean преобразует свой аргумент в значение типа Boolean в соответствии с таблицей 11:

Таблица 11 - Преобразования ToBoolean

Тип аргумента - результат

...

Объект - true

Итак, это объект, таким образом, ToBoolean возвращается trueотсюда ! возвращается false,

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