"true" == true
isNaN(Number("true")) // true
String(true) === "true" // true
"true" is converted to
true is converted to
1. So they differ.
Like you reported, both are converted to numbers, because at least
true can be (see Erik Reppen's comment), and then compared.