A neni nahodou good practise ho nepouzivat? Napr. na projektu, na kterem ted pracuji, je nastaveny linter tak, aby pri prekladu vyhazoval == jako warning.
Asi jo, ale to je právě proto, že má sémantiku doprasenou až k úplné nepoužitelnosti. Nicméně ani s === nemáš vyhráno:
js> true+true===2
true
js> true-true===0
true
js>true===1
false
(ze stejného článku)
Tak pokud nekdo scita nebo odcita boolean, tak mu to patri

. Ono ani jine jazyky nejsou o moc lepsi a muzete si to prasit jak chcete (proc ma byt vubec definovane +/- nad boolean?):
std::cout << true+true; // 2
std::cout << (true+true == true); // 0
JS ma hodne zaludnosti prave kvuli tomu automatickemu pretypovani, jenze to je IMO cena za tu dynamicnost. Ve statickych jazycich to hlida prekladac, v dynamickych programator. A bez "chytreho" pretypovani by zase kod byl plny castu, coz se myslim u dynamickych jazyku moc nenosi. Sice JS neni zadna vyhra, ale IMO PHP je na tom jeste o prapast hur (tam oproti JS nehrapruji obcas typy a nazvy metod, ale dost casto). A teda nektere veci jsou fakt lahudka:
var_dump("01" == "1"); // samebool(true)
$foo = 5 + "10 Little Piggies"; // $foo is integer (15)
PS: Moje oblibenene srovnani JS a ScalaJS:
javascript> ["10", "10", "10", "10"].map(parseInt)
[10, NaN, 2, 3] // WTF
scala.js> List("10", "10", "10", "10").map(parseInt)
List(10, 10, 10, 10) // Yay!