2010-03-28 12 views
7

robię niektóre eksperymenty z tego szkodliwego linii javascript: var undefined = true;var undefined = true;

Każda zmienna w JavaScript niezainicjowany ma wartość undefined, która jest po prostu zmienną, która posiada szczególną wartość 'undefined', więc następujące powinien wykonać alert:

var undefined = true, 
    x; 

if (x) { 
    alert('ok'); 
} 

Ale tak nie jest, a moje pytanie brzmi: dlaczego?

Z dalszych eksperymentów, próbowałem następujące:

var undefined = true, 
    x = undefined; 

if (x) { 
    alert('ok'); 
} 

Tym razem alert jest wykonywany.

Moje pytanie brzmi ... ponieważ w pierwszym fragmencie kodu x znajduje się undefined (ponieważ nie został zainicjowany), dlaczego nie wykonano alert? Najdziwniejsze jest to, że gdy wyraźnie stwierdzając, że x jest undefined (x = undefined), przy czym alert wykonany ...

Odpowiedz

17

Istnieje różnica między zmienną o nazwie undefined i wartością o nazwie undefined.

var undefined = true, 
    x; 

W tym przykładzie zmienna undefined jest ustawiona na wartość true i x do wartości zmiennej (nie!) undefined.

var undefined = true, 
    x = undefined; 

W tym przypadku, zmienna undefined jest ustawiony na wartość true jak również i x jest do wartości zawartej w zmiennej undefined (który jest true).

Tak więc, mimo że można zadeklarować zmienną o nazwie undefined, nie można zmienić faktu, że zmienne nie zainicjowane mają wartość undefined.

+0

Hehe; co by się stało, gdyby zmienna 'undefined' była wartością' undefined'? – Pindatjuh

+3

@Pindatjuh: tak samo, jak gdyby zmienna miała dowolną inną nazwę. Nie ma nic szczególnego w zmiennej o nazwie 'undefined'. – dtb

1

Wystarczy deklarując zmienną o nazwie „nieokreślony” nie oznacza, że ​​jesteś przesłanianie wbudowanego pojęcia co natywna "niezdefiniowana" wartość to.

Wyobraź sobie, że Java pozwoli ci użyć "null" jako identyfikatora. Cóż, domyślam się, że Java nie ma takiego samego przymusu jak Javascript. W każdym razie instrukcja JavaScript zawiera niejawny wymuszenie wartości "x" na wartość logiczną. Wartość nie jest zdefiniowana, więc jej wymuszenie na "boolean" powoduje false.

+0

@Andreas Grech - Dziwaczne, '" \ n \ t "== true' również jest w rzeczywistości" false ". – JulianR

+0

W rzeczywistości pojęcie true w JavaScript jest każda wartość z wyjątkiem null, undefined, pusty ciąg "", "NaN", "0" i "fałsz" –

0

Niezainicjowane zmienne otrzymują specjalną wartość undefined. Po przypisaniu zmiennej do innej zmiennej nadajesz jej ciąg, który odwołuje się do zmiennej zdefiniowanej w bieżącym zakresie. W tym przypadku zdefiniowałeś zmienną o nazwie undefined, więc silnik JavaScript przyjrzy się najpierw zmiennym, zobaczysz, że nadałeś nazwę undefined, a następnie przypiszesz jej tę zmienną.