2016-09-11 26 views
5

Dlaczego te 2 warunkowe różne:Czym różnią się te warianty?

Nieprawidłowe:

if (myObj !== null && typeof myObj !== "undefined") 

Z tego powodu, należy sprawdzić typeof() pierwsza:

Poprawnie:

if (typeof myObj !== "undefined" && myObj !== null) 

Wyciągnąłem ten z witryny w3schools. Według w3schools musisz najpierw przetestować typeof(), dlaczego miałoby to znaczenie. Warunki wyglądają tak samo

+7

Jest to doskonały przykład, dlaczego informacje w3schools powinny być pobierane z przymrużeniem oka. – Pointy

+2

To nie to samo, ponieważ operator && jest zwarty: drugi warunek nie jest oceniany, gdy pierwszy jest fałszywy. – raina77ow

+2

Bo jeśli 'myObj' nie jest w ogóle zdefiniowany, dostaniesz błąd, jeśli najpierw nie sprawdzisz go za pomocą typeof. – adeneo

Odpowiedz

6

Pierwszy warunek spowoduje, że zostanie zgłoszony błąd, jeśli zmienna jest niezadeklarowana.

ReferenceError: myObj is not defined

Zauważ, że operator & & zwarcie, więc w drugim stanie, wyrażenie myObj !== null nie będą oceniane w ogóle jeśli myObj jest niezdefiniowany.

Aby uzyskać szczegółowe informacje, patrz: here.

+1

To spowoduje błąd, jeśli obiekt jest * niezadeklarowany *; może być zadeklarowana i nie ma żadnej wartości, a następnie nie spowoduje błędu. – Pointy

+0

Jednak moja odpowiedź była błędna; Myślę, że potrzebuję drzemki :) – Pointy

+0

@Pointy masz rację, niezadeklarowane to poprawne słowo do użycia. Edytowałem swoją odpowiedź. –

Powiązane problemy