Autor Zpráva
pavel120
Profil
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
Nemusí mít stejný typ, zkus si to :-).
Měsíček
Profil
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
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
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
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? :)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: