2013-05-10 7 views
30

Podczas deklarowania zmiennych u góry funkcji JavaScript najlepiej jest ustawić je na wartość null lub pozostawić jako niezdefiniowaną? Inny sposób zapytać, jakie okoliczności wymagają poniżej każdej opcji?Ustaw zmienną JavaScript = null lub pozostaw ustawienie niezdefiniowane?

Wariant A:

var a = null, 
    b = null; 

Wariant B:

var a, 
    b; 
+2

Pójdę z opcją "b" –

+3

@ Mr.Alien - zgodził się. Nie ma powodu, aby używać wersji '= null', chyba że rzeczywiście ma znaczenie, że wartości zmiennych mają wartość' null' zamiast 'undefined'. –

+0

W rzeczywistości 'var a, b;' nie zawsze może * pozostawiać 'undefined' *. W poprzednich wersjach IE, musiałbyś zmienić ten fragment kodu na 'var a = undefined, b = undefined;', w przeciwnym razie twój kod wygenerowałby błąd podczas próby dostępu do niego (nawet gdybyś tylko próbował po prostu sprawdzić czy ma on pewną wartość przy pomocy 'if (a && b)' na przykład). W takim przypadku zmienna nieustalona różni się od "niezdefiniowanej". – falsarella

Odpowiedz

13

Oświadczam je jako niezdefiniowany kiedy nie przypisać wartość, ponieważ są niezdefiniowane po wszystkim.

+5

Czy konieczne jest "przypisać" niezdefiniowane, ponieważ, jak powiedziałeś, są one ostatecznie niezdefiniowane? – VivekDev

+1

Jak już wspomniano, nie jest konieczne zadeklarowanie niezdefiniowanego, ale także jeśli zadeklarujesz niezdefiniowane, to podczas testowania tej wartości nie będziesz wiedział, czy celowo ją ustawiłeś, czy też nigdy nie została ustawiona. Dlatego wolę wartość null w przypadkach, w których może nie być wartości. –

0

Krótka odpowiedź brzmi, że nie ma znaczenia ze względu na sposób, w jaki przebiega przez stos. Istnieją jednak sytuacje, w których lepiej byłoby, gdyby dane były podawane poza zakresem.

+4

Przykro mi, ale ta odpowiedź nie ma żadnego sensu. Nie ma nic wspólnego z żadnym stosem i nie ma nic wspólnego z zasięgiem. Jedna wersja ustawia wartości zmiennych na 'null', a druga ustawia je na' undefined'. To jest tylko * różnica *; nie ma związku z żadną z rzeczy, o których wspomniałeś. –

+0

@MichaelGeary tak, ale brzmi mądrze –

1

Jedynym razem trzeba go (lub nie) jest ustawiony, jeśli trzeba jednoznacznie sprawdzić, że zmienna a jest dokładnie ustawiona na null lub undefined.

if(a === null) { 

} 

... nie jest taki sam jak:

if(a === undefined) { 

} 

powiedział, że a == null && a == undefined powróci true.

Fiddle

+0

Sprawdzanie wartości NULL w tym przypadku nie jest dobre. Jako, że łamie on "najlepszą zerową komplikacje" najlepszą praktykę w javascript. Powinieneś porównać wartość zerową tylko dla obiektu DOM (http://my.safaribooksonline.com/book/programming/javascript/9781449328092/iidot-programming-practices/id2779483) –

+0

Nie zgadzam się; wszystko, co chcemy zrobić, to sprawdzić, czy zmienna jest rzeczywiście 'null' lub' undefined' - które są całkowicie poprawnymi sprawdzeniami. Zgadzam się, że w cytowanym przykładzie źle jest sprawdzić "null", ale to tylko jeden przypadek :) – jterry

30

To zależy od kontekstu.

  • "niezdefiniowana" oznacza, że ​​ta wartość nie istnieje. typeof zwraca "niezdefiniowany"

  • "null" oznacza, że ​​ta wartość istnieje z pustą wartością. Kiedy używasz typeof do testowania "null", zobaczysz, że to obiekt. Innym przypadkiem, gdy serializuje się wartość "null" do serwera zaplecza, takiego jak asp.net mvc, serwer otrzyma "null", ale gdy serializuje się "undefined", serwer prawdopodobnie nie otrzyma wartości.

9

Ogólnie używam wartości NULL dla wartości, o których wiem, że mogą mieć stan "zerowy"; na przykład

if(jane.isManager == false){ 
    jane.employees = null 
} 

W przeciwnym razie, jeśli jest to zmienna lub funkcja, która nie jest jeszcze określona (a zatem nie jest „użyteczny” w tej chwili), ale powinien być ustawiony później, zwykle pozostawić niezdefiniowane.

-12

Można użyć ''; do deklarowania zmiennej NULL w JavaScript

+8

Pusty łańcuch znaków i 'null' to bardzo różne rzeczy. –

1

Ogólnie mówić zdefiniowałem null jest wskazać człowieka ustawioną wartość i niezdefiniowane w celu wskazania żadne ustawienie nie miało miejsca.

1

Zazwyczaj ustawiam to, czego oczekuję od funkcji.

Jeśli ciąg, niż i ustawi go na pusty ciąg = "", to samo dla obiektu = {} i tablicy = [], całkowite = 0.

użycie tej metody oszczędza mi konieczności sprawdzenia wartości null/undefined. moja funkcja będzie wiedziała jak obsługiwać ciąg/tablicę/obiekt, niezależnie od wyniku.

Powiązane problemy