Autor | Zpráva | ||
---|---|---|---|
pavel120 Profil |
#1 · Zasláno: 2. 1. 2009, 17:44:43
Měl bych otázku na datový typ prvků pole. Musí mít každý prvek pole stejný datový typ? Nebo může být datový typ těchto prvků různý (lze například kombinovat datový typ číslo a řetězec)? Předem děkuji za odpovědi.
|
||
DJ Miky Profil |
#2 · Zasláno: 2. 1. 2009, 18:10:44
Nemusí mít stejný typ, zkus si to :-).
|
||
Měsíček Profil |
#3 · Zasláno: 2. 1. 2009, 18:47:04 · Upravil/a: Měsíček
Reaguji na uživatele pavel120:
"Měl bych otázku na datový typ prvků pole. Musí mít každý prvek pole stejný datový typ?" Ne. Není to tak striktní jako v jiných jazycích (jako například pole v C/C++), i když tyto jazyky mají narozdíl od JS struktury, které to bohatě nahradí. "Nebo může být datový typ těchto prvků různý (lze například kombinovat datový typ číslo a řetězec)? " Přesně tak. Dokonce může mít i objekty či funkce. <script type="text/javascript"> var array = [ [{A: 1, B:2}], ['A','B','C'], [ 1, 2, 3 ] ]; alert(array[0][0]["A"]); // 1 </script> |
||
Měsíček Profil |
#4 · Zasláno: 2. 1. 2009, 19:44:14
Jinak, ještě co se týče těch polí funkcí, tak volání je naprosto jednoduché tedy za hranaté závorky, závorky kulaté {x[]();}.
<script type="text/javascript"> /** * Definice polí */ var pole_1 = [function (i) { return i*i*i;}]; // Anonymní funkce var pole_2 = [function x(i) { return i*i*i;}]; // Normální funkce /** * Přístup k těmto funkcím */ alert(pole_1[0](3)); // 27 alert(pole_2[0](3)); // 27 </script> |
||
ah01 Profil |
#5 · Zasláno: 2. 1. 2009, 20:10:45
Měsíček
Pozor: var pole_2 = [function x(i) { return i*i*i;}]; // Normální funkce Pokud myslíš tou Normální funkcí to, že budeš mít globální funkci x, tak to není tak docela pravda (v IE zrovna ano, ale jinde tomu tak nebude). var faktorial = function x(i) { return i>1 ? x(i-1)*i : i; }; alert(faktorial(5)); // fungovat bude alert(x(5)); // fungovat nebude, protože x není definované (existuje jen v rámci fce.) Ve většině případů to vadit nebude, ale může se stát, že by někdo chtěl zavolat takto definovanou fci. x a ono by to zrovna nešlo... |
||
Měsíček Profil |
#6 · Zasláno: 2. 1. 2009, 20:31:37 · Upravil/a: Měsíček
Reaguji na ah01:
Ano jsem si toho vědom, možná jsem se trochu "zavádějícím způsobem" vyjádřil v předchozím příspěvku, zkusím to tedy napravit. <script type="text/javascript"> /********************************************************** * @ Douglas Crockfordův oblíbený způsob definice funkcí.* *********************************************************/ /** * Už s tím, že jméno funkce i jméno proměnné by mělo být stejné. */ var f = function f (i) { return i*i/i; }; alert(f(3)); // 3 /** * Pokud to z nějákého důvodu nevyhovuje a je potřeba mít jméno proměnné * odlišné od jména funkce, tak je třeba brát v potaz, že vyvolání funkce * by se mělo vykonat jménem proměnné. */ var _f = function __f (i) { return i*i/i; }; alert(_f(4)); // 4 -> Všechny prohlížeče /** * To samé a však odlišné při práci s poli. */ var p = [function f_ (i) { return i*i/i; }]; alert(p[0](5)); // 5 /** * IE nám ovšem dovoluje zasahovat dál tedy bere funkci v poli * skoro jako globální, jak jsi již upozornil. */ alert(f_(10)); // 10, ovšem pouze pro IE. /** * Z toho tedy plyne poučení, že pokud definujeme funkce v poli, měli by jsme * také volat pomocí indexů pole []() a pokud definujeme funkci v proměnné * měli by jsme k ní přistupovat jedině pomocí jména proměnné. */ </script> EDIT: koukám, že nám tady blbne zvýrazňovač, čím pak to? :) |
||
Časová prodleva: 15 let
|
0