Почему логический не оператор в javascript возвращает другой результат между Boolean значение и Boolean object? Рассмотрим следующий пример.
!true // false
!false // true
!(new Boolean(true)) // false
!(new Boolean(false)) // false
Из spec, он говорит, что оцениваемое значение преобразуется ToBoolean
. ToBoolean вернет true, если аргумент является Object, и возвращает как есть, если аргумент является логическим.
Копаем дальше, ToBoolean также используется в других местах, таких как оператор if и условный оператор, рассмотрим следующий пример:
var a = (new Boolean(false)) ? "unexpected" : "expected";
console.log(a); // unexpected
Вопрос: является ли Boolean object объектом Object или логическим? Должен ли мы не оценивать Boolean-объект как Boolean?
UPDATE
Мой вопрос был отмечен как дублирующий вопрос с этим. Этот вопрос не имеет удовлетворительных ответов, потому что никто не отвечает на мой вопрос, Является ли Boolean объектом Object или логическим? Должны ли мы не оценивать Boolean-объект как булево?
Простое знание Boolean объекта - это недостаточно, почему он существует и что является правильным способом работы и/или проектирования объектов с булевым объектом, который все еще остается без ответа.