Neki dan sam naletio na nesto od cega sam pao sa stolice. Da li znate sta ce sljedeci kod u javascriptu da vrati:
["10", "10", "10", "10"].map(parseInt)
Normalan citalac ce ocekivati:
[10, 10, 10, 10]
Ipak, JS dizajneri su skontali da su svi u krivu, pa cemo imati ovo:
[10, NaN, 2, 3]
Valjda zato sto Array.map prosljedjuje vise parametara nego sto smo navikli. Ipak, ne lezi vraze, ovo ce da radi kako treba:
[1, 4, 9].map(Math.sqrt) -> [1, 2, 3]
Evo primjera sta se desava:
function parse_int(s,i) { print("==> " + i); return parseInt(s); }
js> ["10", "10", "10", "10"].map(parse_int)
==> 0
==> 1
==> 2
==> 3
[10, 10, 10, 10]
Razlog svega ovoga je sto javascript dozvoljava poziv funkcija bez parametera, iako funkcija zahtijeva parametare:
function foo(a) { return a + 1; }
js> foo()
NaN
js> foo(1)
2
js> foo(1,2)
2
a nas parseInt()
kao drugi parametar prima bazu po kojoj ce raditi konverziju. U nasem slucaju, baza je index u nizu, pa imamo:
parseInt("10", 0); -> 10
parseInt("10", 1); -> NaN
parseInt("10", 2); -> 2
parseInt("10", 3); -> 3
Eto, naucio sam nesto novo. Unaprijed se izvinjavam svim javascript ekspertima koji poznaju ovu materiju - odoh si obloziti oci kamilicom da dodjem sebi.