Вы должны использовать Boolean(false)
вместо new Boolean(false)
, поскольку Boolean
- это функция.
В противном случае вы получите пустой объект {}
, который отличается от того, который возвращаетсясамой функцией, которая является boolean
.
const x = new Boolean(false);
const y = Boolean(false);
console.log(x, typeof x);
console.log(y, typeof y);
В первом тесте вы проверяете только, является ли значение истинным, а пустой объект - правдивым, поскольку x = {}
тест проходит:
const x = new Boolean(false);
console.log(x, !!x, !!{}, Boolean(x))
if (x) {
console.log("if(x) is true");
}
Однако при использовании ==
оператор приводит new Boolean(false)
к своему примитивному значению, используя x.valueOf
, что составляет false
, и, таким образом,равенство проходит.
const x = new Boolean(false);
console.log(x.valueOf())