Treba mať na pamäti rozdiel medzi ==
a ===
. JavaScript sa snaží pomáhať programátorovi tak, že ==
používa pretypovanie (type coercion) , napríklad zmení reťazec na číslo (ak sa to dá) a tak ho môžeš porovnať s číslom:
console.log(5 == "5"); // true , TS chyba
console.log(5 === "5"); // false , TS chyba
Toto pretypovanie nie je vždy ideálne. Napríklad pri porovaní ""
a "0"
dostaneme false,
pretože sa reťazce nerovnajú. V druhom prípade 0
a prázdny reťazec (""
) sú považované za nepravdivé (falsy, t.j. správajú sa akofalse
) a preto sú pri==
rovnaké a výsledkom je true
. Ak použijeme ===
tak dostaneme false
.
console.log("" == "0"); // false
console.log(0 == ""); // true
console.log("" === "0"); // false
console.log(0 === ""); // false
string == number
andstring === number
sú v TypeScripte kompilačné chyby.
Podobne ako ==
vs. ===
sa správa aj !=
vs. !==
Tip: Vždy používaj ===
a !==
s výnimkou pre null kontrolu.
Na zistenie štrukturálnej rovnosti dvoch objektov nám nestačí ==
/===
console.log({a:123} == {a:123}); // False
console.log({a:123} === {a:123}); // False
Pomôže nám npm balíček deep-equal.
import * as deepEqual from "deep-equal";
console.log(deepEqual({a:123},{a:123})); // True
Hľadanie daného id
:
type IdDisplay = {
id: string,
display: string
}
const list: IdDisplay[] = [
{
id: 'foo',
display: 'Foo Select'
},
{
id: 'bar',
display: 'Bar Select'
},
]
const fooIndex = list.map(i => i.id).indexOf('foo');
console.log(fooIndex); // 0