В JS " " == 0
равняется true
при свободном / мягком сравнении, вы должны использовать оператор строгого равенства ===
/ !==
вместо:
" " !== 0
Чтобы добраться до первого состояния.
Тесты:
console.log(" " == 0); // true
console.log(" " === 0); // false
Свободная сравнительная таблица:
"" == "0" // false
0 == "" // true
0 == "0" // true
false == "false" // false
false == "0" // true
false == undefined // false
false == null // false
null == undefined // true
" \t\r\n" == 0 // true
Строгая сравнительная таблица:
"" === "0" // false
0 === "" // false
0 === "0" // false
false === "false" // false
false === "0" // false
false === undefined // false
false === null // false
null === undefined // false
" \t\r\n" === 0 // false
(Примеры Дугласа Крокфорда)
Хорошая практика:
Когда это возможно, используйте оператор строгого равенства, потому что с оператором свободного равенства JS выполняет приведение типа , которое является хитом performance и не всегда дает ожидаемые результаты, как показано в сравнении выше графики.