Autor Zpráva
_es
Profil
V inom vlákne, pri debate o možnosti alebo nemožnosti odstránenia globálnej premennej alebo vlastnosti bol spomenutý rozdiel medzi nimi.
Prišiel som na niekoľko zaujímavých príkladov a po ich otestovaní je zrejmé, že rozdiel medzi globálnou premennou a globálnou vlastnosťou (vlastnosťou objektu window) nie je taký jednoduchý. V nasledujúcich príkladoch sú dve možnosti, buď bude odkaz otvorený v novom okne, alebo v tom istom okne podľa toho, či nastane pomenovanie okna. Funkčnosť niektorých príkladov sa líši v závislosti od použitého prehliadača. Pre lepší "zážitok" doporučujem pred otestovaním tipnúť výsledok.

Príklad a (odkaz):
<script> name = "x"; </script>
<a href="http://google.com" target=x>google</a>

Príklad b (odkaz):
<script> window.name = "x"; </script>
<a href="http://google.com" target=x>google</a>

Príklad c (odkaz):
<script> name = "x"; window.name = "x"; </script>
<a href="http://google.com" target=x>google</a>

Príklad d (odkaz):
<script> window.name = "x"; name = "x"; </script>
<a href="http://google.com" target=x>google</a>

Príklad e (odkaz):
<script> window.name = "x"; name = "y"; </script>
<a href="http://google.com" target=x>google</a>

Príklad f (odkaz):
<script> name = "y"; window.name = "x"; </script>
<a href="http://google.com" target=x>google</a>

Príklad g (odkaz):
<script> var name = "x"; </script>
<a href="http://google.com" target=x>google</a>

Príklad h (odkaz):
<script> window.name = "x"; var name = "x"; </script>
<a href="http://google.com" target=x>google</a>

Príklad i (odkaz):
<script> window.name = "x"; var name; </script>
<a href="http://google.com" target=x>google</a>

Príklad j (odkaz):
<script> var name; window.name = "x"; </script>
<a href="http://google.com" target=x>google</a>

Príklad k (odkaz):
<script> name = name; window.name = "x"; </script>
<a href="http://google.com" target=x>google</a>
_es
Profil
Asi sa to nikomu nechcelo testovať, tak tu je tabuľka, ako nastáva pomenovanie okna v jednotlivých prehliadačoch:
r - rovnaké okno n - nové okno

          a    b    c    d    e    f    g    h    i    j    k 
FF 3.5    n    r    n    r    r    n    n    r    r    r    n
IE 8      r    r    r    r    n    r    n    n    n    n    r
O 9.64    n    r    n    r    r    n    n    n    n    n    n
Ch 3.0    r    r    r    r    n    r    n    r    r    r    r
Yur4Y
Profil
Vždy som si myslel, že zápis name a window.name je totožný (a odlišuje sa jedine var name), keď som sa hral s delete operátorom, aj mi to tak vychádzalo. Teraz som dosť mimo :-/
Chamurappi
Profil
Reaguji na _es:
Je to zajímavé. Děkuji za průzkum.
Explorer 7 se na tvých příkladech chová stejně jako osmička. (Což tedy může být způsobeno tím, že jede osmička v quirku, ale pochybuji, že by režim měl na toto vliv.)
_es
Profil
Ja si to vysvetľujem tak, že vlastnosť objektu window a globálna premenná s rovnakým menom sú vo všeobecnosti rozdielne veci.
A dodatočne tie rozdielne veci prehliadač zosúlaďuje.
Pričom môže nastať viac možností:
- jedna "vec" prepíše druhú
- jedna "vec" len prekryje druhú pre rovnaký názov a obe zostávajú existovať
- niečo medzi predchádzajúcimi možnosťami
_es
Profil
Ešte jedna zaujímavosť.
Je v nasledujúcom kóde v súbore HTML zaručené, že "vyskočí" hláška s textom "x"?
Funkcia alert nebola predefinovaná a html kód je bezchybný.
Môže "vyskočiť" hláška s iným textom?
Nejaký html kód
<script type="text/javascript" language="javascript">
var x = "x";
alert(x);
</script>
Nejaký html kód
_es
Profil
Tak teda k predchádzajúcemu príspevku:
Vo Firefoxe, Opere a Chrome môže definíciu var x; "prebiť" skôr definovaná globálna vlastnosť týmto spôsobom:
<script>
__defineGetter__("x", function(){ return "skorsie x";});
__defineSetter__("x", function(){});
</script>
<script>
// delete x;
var x = "x";
alert(x);
</script>

Po odkomentovaní riadku s príkazom delete už je x rovné "x".
Odkazy: bez delete, s delete
Vo Firefoxe a Chrome môže ešte neplechu spraviť skoršia definícia konštanty x príkazom const x = "skorsie x"; ktorá nejde zmazať, zmeniť ani predefinovať.
A (ne)funguje to potom bez akejkoľvek chybovej správy, pokiaľ to bude bez príkazu var (odkaz).

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:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0