Autor Zpráva
Camo
Profil
Zdravím vás,
a prosím niekoho ochotného aby mi vysvetlil nasledujúcu vec.
Potrebujem otestovať premennú na true/false s tým, že undefined by bolo false.
Myslel som si, že to pôjde jednoducho takto:
alert( x ? true : false );
Samozrejme to skončí chybou ak je x undefined.

Nechápem na tom jednu vec. Keď napíšem:
alert( window.x ? true : false );
tak to funguje.
Vie mi niekto vysvetliť,a ký je v tom rozdiel?

Ďakujem.
juriad
Profil
Rozdíl je v tom, že neexistující proměnná je chyba, ale neexistující atribut objektu je undefined.
Rozlišuj tedy definovanou proměnnou s nedefinovanou hodnotou a nedefinovanou proměnnou.

Pokud potřebuješ testovat existenci proměnné, děláš něco špatně, nikdy jsem to nepotřeboval a neumím si představit situaci, kde je to vhodné.
Camo
Profil
juriad
No ale
typeof x === 'undefined';
aj
typeof window.x ==='undefined';

PS: Pýtam sa len teoreticky ale nechápem, prečo by malo byť zisťovanie existencie premennej v js chybou. V php je to bežné tak prečo nie v js?
_es
Profil
Camo:
Viď príbuzné vlákno: [].indexOf v Internet Exploreru a obdoba PHP funkce isset().

prečo by malo byť zisťovanie existencie premennej v js chybou.
Lebo to obvykle naozaj znamená chybný kód. Na zachytávanie chýb existujú výnimky. Videl by som to na zle navrhnutý kód - inak by si asi zisťovať existenciu premennej nepotreboval.

juriad:
Rozlišuj tedy definovanou proměnnou s nedefinovanou hodnotou a nedefinovanou proměnnou.
„Nedefinovaná hodnota“ je trochu zvláštny pojem - je to len špeciálna hodnota v JS - premenná s inou hodnotou sa dá tiež nastaviť na undefined.
Camo
Profil
Ok ďakujem.
Joker
Profil
Camo:
alert( x ? true : false );
Samozrejme to skončí chybou ak je x undefined.

Neskončí.
Např.:
var x; // undefined
alert(x ? "true" : "false"); // false

Skončí to chybou v případě, že ta proměnná vůbec neexistuje (což je něco jiného, než že je undefined), což je typicky chyba programátora.

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:

0