| 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 ); Nechápem na tom jednu vec. Keď napíšem: alert( window.x ? true : false ); Vie mi niekto vysvetliť,a ký je v tom rozdiel? Ďakujem. |
||
| juriad Profil |
#2 · Zasláno: 27. 10. 2014, 11:43:54
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 |
#3 · Zasláno: 27. 10. 2014, 12:47:35
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 |
#4 · Zasláno: 27. 10. 2014, 13:02:05
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 |
#5 · Zasláno: 27. 10. 2014, 16:18:25
Ok ďakujem.
|
||
| Joker Profil |
#6 · Zasláno: 27. 10. 2014, 16:38:05
Camo:
alert( x ? true : false ); 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. |
||
|
Časová prodleva: 12 let
|
|||
0