Почему! 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 оценивается следующим образом:
Пусть expr будет результатом вычисления UnaryExpression.
Пусть oldValue будет
ToBoolean(GetValue(expr))
,Если oldValue
true
, вернутьfalse
,Вернуть
true
,
и:
9.2 ToBoolean
Абстрактная операция ToBoolean преобразует свой аргумент в значение типа Boolean в соответствии с таблицей 11:
Таблица 11 - Преобразования ToBoolean
Тип аргумента - результат
...
Объект -
true
Итак, это объект, таким образом, ToBoolean
возвращается true
отсюда !
возвращается false
,