W JavaScript żaden ciąg znaków nie jest równy null
.
Być może spodziewałeś się, że pass == null
to prawda, gdy pass
pusty 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 0
są luźno równe, możesz rozsądnie przypuszczać, że ''
i null
są luźno równe. Jednak nie są.
To wyrażenie jest fałszywe:
'' == null
Wynik porównania dowolnego ciągu znaków null
jest fałszywy. Dlatego pass == null
wszystkie 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 pass
jest 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 .