W JavaScript żaden ciąg znaków nie jest równy null.
Być może spodziewałeś się, że pass == nullto prawda, gdy passpusty ciąg znaków, ponieważ masz świadomość, że operator luźnej równości ==dokonuje pewnego rodzaju przymusu typu.
Na przykład to wyrażenie jest prawdziwe:
'' == 0
Natomiast operator ścisłej równości ===mówi, że jest to fałsz:
'' === 0
Biorąc to pod uwagę ''i 0są luźno równe, możesz rozsądnie przypuszczać, że ''i nullsą luźno równe. Jednak nie są.
To wyrażenie jest fałszywe:
'' == null
Wynik porównania dowolnego ciągu znaków nulljest fałszywy. Dlatego pass == nullwszystkie pozostałe testy są zawsze fałszywe, a użytkownik nigdy nie otrzymuje ostrzeżenia.
Aby naprawić kod, porównaj każdą wartość z pustym ciągiem:
pass === ''
Jeśli masz pewność, że passjest to ciąg, pass == ''zadziała również, ponieważ tylko pusty ciąg jest luźno równy pustemu ciągowi. Z drugiej strony niektórzy eksperci twierdzą, że dobrą praktyką jest zawsze stosowanie ścisłej równości w JavaScript, chyba że specjalnie chcesz zastosować przymus typu, który wykonuje operator luźnej równości.
Jeśli chcesz wiedzieć, które pary wartości są luźno równe, zobacz tabelę „Porównania podobieństwa” w artykule Mozilli na ten temat .