Tady je někdo kreten.
Jazyk to nebude.
Víš, je rozdíl mezi false a new Boolean(false).
To první je unboxed primitive value a to druhé je boxed primtive value.
To boxed znamená že je to objekt s vlastním prototypem.
Což znamená že == a === porovnává reference nikoli primitivní hodnoty.
Když na boxed boolean aplikuješ negaci, vyjde ti vždycky false protože negace objektu je vždycky false (protože každý objekt mimo null je přetypovatelný na true).
!new Boolean(true) === !new Boolean(false)
ti vyjde jako true.
A opět, neni to divnost jazyka, je to jenom kompletní ignorace se ho alespoň v mezích naučit.
TEČKA.
Máte recht, už jsem si to ověřil a je to tak - negace neprování nejprve unboxing (jak bych čekal, když se javaskriptaři tolik prsí transparentností boxingu/unboxingu), ale bere to přednostně jako onu "negaci" objektu. Moje nepozornost. Otázkou zůstává, zda je nutno takovýmto věcem věnovat energii. Asi to není jazyk pro mě.
Váš popis == a === nechápu, jejich funkčnost jsme tu rozebrali pár příspěvků zpět.
Je dobře, že se v JS dobře orientujete, protože nám můžete vysvětlit podstatu onoho výsledku
> new Boolean(true) == new Boolean(true)
false
A příště to zkuste slušněji.