2009-10-13 20 views
17

Używam JavaScript od kilku lat i nigdy nie dbałem o różnicę między null & undefined wcześniej, zawsze używam undefined do sprawdzania istnienia obiektu.Kiedy JavaScript zwraca wartość null & undefined?

Ale ostatnio przeszedłem przez this article. Tutaj mówili

JavaScript rozróżnia null, która jest obiektem typu „obiektu”, który wskazuje na celowy brak wartości, a niezdefiniowane, który jest obiektem typu „niezdefiniowane”, który wskazuje wartość niezainicjowanej - że to, wartość nie została jeszcze przypisana. Porozmawiamy o zmiennych później, ale w JavaScript można zadeklarować zmienną bez przypisywania jej wartości. Jeśli to zrobisz, typ zmiennej jest niezdefiniowany.

Jestem teraz całkowicie zdezorientowany, co dokładnie jest tutaj bez wartości. Jak ta wartość nie jest różna od undefined. I jakie są okoliczności, w których javascript zwraca null.

Próbowałem poniższym przykładzie

var sam; 
alert(sam); // returns undefined 

And

try { 
    //var sam; 
    alert(sam); 
} catch(ex) { } // exception says: sam is undefined 

i nie jestem pewien kiedy js powrocie null. Czy ktoś może mnie wyjaśnić.

+1

http://stackoverflow.com/questions/801032/nul l-object-in-javascript – rahul

+0

dzięki phoenix za link .. pomaga mi zrozumieć różnice .. ale może mi udostępnić przykład kodu javascript zwraca null ... ?? ponieważ mogę coulndt w stanie dowiedzieć się, kiedy zwraca null .. – RameshVel

+0

Zobacz, co stanie się, jeśli ustawisz undefined = "coś";) – powtac

Odpowiedz

14

alert (sam); // zwraca undefined

Nie, to wyjątek.

Otrzymujesz undefined po uzyskaniu dostępu do niezweryfikowanej właściwości; pojawi się błąd, gdy użyjesz bezprawnie nazwy bezpośrednio.

Zmienne globalne są interesujące, ponieważ mogą one być dostępne zarówno za pomocą prostego nazwę zmiennej lub używając właściwości window globalnego obiektu:

alert(window.sam);  // undefined 
alert(window['sam']); // undefined 
alert('sam' in window); // false 
alert(sam);    // ERROR 

Jeśli sam została zadeklarowana ale nie zainicjowany, dostępu window.sam nadal dostaje undefined, ale z innego powodu: istnieje obiekt window dla obiektu, ale wskazuje on ten sam obiekt undefined, jak w przypadku dostępu do nieistniejącej właściwości.

var sam; 
alert(window.sam);  // undefined 
alert(window['sam']); // undefined 
alert('sam' in window); // ** true 
alert(sam);    // ** undefined 

Jest to oczywiście mylący, zakrwawiony bałagan; undefined to jeden z najgorszych błędów w projektowaniu języka JavaScript.

null z drugiej strony jest w porządku i działa prawie tak samo jak zerowa/zerowa/nieważna/Brak wartości w innych językach. Nie wchodzi w żadne z powyższych.

+0

dzięki za odpowiedź Bobince ... jak rozumiem js nigdy nie zwraca null w dowolnym czasie, chyba że ustawimy zmienna = null ... mam rację .. – RameshVel

+0

Tak. 'null' jest wartością normalną, która nie pojawia się, chyba że prosisz o nią konkretnie. "undefined" jest jedynym, który w magiczny sposób pojawia się znikąd dzięki samemu językowi. (Troska, chociaż: z normalnym kompilatorem podwójnych równań, 'undefined == null'.) – bobince

+1

" ale wskazuje na ten sam obiekt 'undefined'"? Z pewnością chciałeś powiedzieć - ma tę samą wartość "niezdefiniowaną". – kangax

2
<script type="text/javascript"> 
// variable with an unasigned value 
var a; 
if (a == undefined) { 
    alert('a is undefined'); 
} 

if (a == null) { 
    alert('a is undefined'); 
} 

// this will produce an error 
if (b == undefined) { 
    alert('b is undefined'); 
} 

// this is the right way to handle not defined variables 
if (typeof(c) == 'undefined') { 
    alert('c is blabla'); 
} 
</script> 
1

Sposób, w jaki je odróżnić jest zdefiniowana jako: „Nie określono tę wartość”, a zerowy jest „Mam zdefiniowane tę wartość, ale nie wiem, czy nie może dowiedzieć się, jaka wartość powinna być."

+0

naprawdę? ciężko uwierzyć. wątpliwe oświadczenie ... – Martian2049

2

Aby zmienna otrzymała wartość pustą, musi zostać przypisana null jest używana do wskazania nieznanej lub nieprzeciętej wartości, z drugiej strony jest przeznaczona do wskazania, że ​​żądana osoba, do której uzyskano dostęp, nigdy nie została przypisana wartość. to różni się od null.

z null ktoś celowo mówiąc: „nie wiem, co wartość powinna to jeszcze” lub „nie dbam o to, co wartość to teraz”. OTH jest w undefined naprawdę mówiąc "Jesteś pewien, że powinieneś używać tej wartości, której nie przypisano".

+0

dzięki Anthony .. to jest wat, którego się spodziewałem, więc js nigdy nie zwróci wartości null w dowolnym czasie, chyba że ustawimy zmienną = null .. am i right .. ?? – RameshVel

+0

@Remesh: twoje użycie słowa "zwraca" jest trochę mylące. Funkcje "zwracają" wartości. Myślę, że to, co chcesz ustalić, to fakt, że zmienna nigdy nie została przypisana do wartości, która nigdy nie mogłaby mieć wartości zerowej. To jest poprawne. – AnthonyWJones

+0

jeśli nie zainicjowaliśmy zmiennej, js przydziela (zwraca) nieokreśloną .. w ten sam sposób, gdy obiekt jest zerowany przez javascript ,, ponieważ wiem, że byłby on przypisany jawnie przez var = null; – RameshVel

Powiązane problemy