Pokud je to možné, používejte vždy operátor striktního porovnání === pro přesnější porovnání hodnot bez konverze typu.
Při porovnávání s ==
se JS snaží automaticky konvertovat oba operandy na stejný typ, což může vést k neočekávaným výsledkům.
Všechny tyto hodnoty se vyhodnotí jako pravdivá hodnota!
console.log(false == '0');
console.log(null == undefined);
console.log('' == 0);
if ({}) {
// ...
}
Nebezpečné porovnání s booleanem
Můžete chtít ověřit podmínku^fm-33, ve které dojde ke konverzi pole na logický výraz. Můžeme to udělat následujícími třemi způsoby.
var pole = [];
// if (Boolean(pole))
if (pole) {
// ok
}
Nikdy nepoužívejte dvojité rovná se s true
nebo false
.
if (pole == true) {
// ne
}
if (pole == false) {
// ok
}
V tomto případě máme neprimitivní hodnotu, která se musí stát primitivní. Takže se z ní stane prázdný řetězec.
if ("" == true) {
// ne
}
if ("" == false) {
// ok
}
Tyto hodnoty, stále nejsou stejného typu, takže se z obou musí stát čísla. Takže konverze pokračuje
if (0 === 1) {
// ne
}
if (0 === 0) {
// ok
}
Jedno z nich se stane 0, druhé se stane 1.