...Ale jinak jsi dobře trefil hřebíček, páč programovací jazyky, jejichž tvůrci neberou drogy, mají dva operátory - jeden testuje shodnost hodnot a druhý případně identitu. Tak to nejspíš v JS mysleli, akorát to totálně zprasili.
Jinak jsem to ještě neviděl, např. Smalltalk to má taky tak (= a ==), kdy na "test identity" je kladen důraz pro jeho využití s jedináčky a test podobnosti je překrytelný. To je ale logické.
Ten první operátor by právě vracel
new Bool(true) == new Bool(true) -> true
V Nodejs nevrací. Ale už jsem to omrdal:
> !new Boolean(true) == !new Boolean(true)
true
Jako by vývojáři neměli dost jiné práce než hlídat jazyk...
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.