Nauczyłem się zawsze sprawdzać zmienne w języku JavaScript:

function x(variable){
   if(typeof variable !== "undefined" && variable !== null)...
}

Nowy kolega powiedział teraz, że jest łatwiejszy i lepiej po to zrobić:

function x(variable){
   if(variable != null)
}

Czy to naprawdę to samo? Jak to działa?

Dzięki

2
Christian 12 sierpień 2014, 11:50

3 odpowiedzi

Najlepsza odpowiedź

NULL i niezdefiniowane są dwa Prymitywne datatypy w JavaScript.


Przykładem z Mozilla MDN:

var x;
if (x === undefined) {
   // these statements execute
}
else {
   // these statements do not execute
}

Należy tutaj użyć ścisłego operatora równości, a nie standardowy operator równości, ponieważ x == undefined sprawdza, czy x jest null, podczas gdy ścisła równość nie. null nie jest równoważny undefined.


function x(variable){
   if(variable != null) // variable would be both null and undefined for comparison
}

Powyższy przykład myślę, że działa, ponieważ nie używasz ścisłych porównania. Krótko mówiąc, obie przykłady nie są takie same, ale mogą podać ten sam wynik. Wszystko zależy od tego, czy twój wymóg logiczny jest ścisłym porównaniem, czy nie.

1
sri 12 sierpień 2014, 08:38

function x(variable){ if(typeof variable !== "undefined" && variable !== null)... }

Powyżej sprawdzi, czy zmienna jest istnieje, czy jest zadeklarowany, a jeśli tak, to nie jest null. Jest to dobre podejście, jeśli nie masz pewności co do zmiennej deklaracji.

function x(variable){ if(variable != null) }

Powyżej sprawdzi, czy zmienna nie jest null. Jest to dobre tylko wtedy, gdy jesteś pewien, że jest zadeklarowany na początku.

Dodatkowy

return value === null || value === undefined;

Powyżej jest dla null lub niezdefiniowany.

Mam nadzieję że to pomoże.

Twoje zdrowie!

0
Anjana Silva 12 sierpień 2014, 07:59

Jedyną różnicą jest to, że pierwsza może być bezpiecznie używana do sprawdzania zmiennej globalnej

> foo // -> ReferenceError
> foo != null // -> ReferenceError
> typeof foo !== 'undefined' && foo !== null // -> false

Ale w twoim przykładzie nie ma znaczenia, ponieważ pusty argument funkcji jest zawsze undefined

0
vil 12 sierpień 2014, 08:01