почему true == "5" возвращает false
если учесть что для сравнения 0, null, undef, NaN, "", false возвращают false, а все остальное true
"6" возвращает true true == "6" возвращает false почему ?? |
Потому что при сравнении булева со строкой оба значения в данном случае приводятся к числу.
alert(true == "1 ") Почему так? ¯\_(ツ)_/¯ Там вообще много странного. Никто на память эту хрень не помнит. Используйте ===. P.S. К true, если очень надо, можно привести напрямую: alert(Boolean("6")) |
Сравнение x === y называется строгим сравнением x и у, и в основном все знают как это работает.
Однако x == y, которое называется абстрактным сравнением x и у, может вызывать непонимание того, почему оно так работает. Результаты абстрактного сравнения не вычисляются случайным образом, алгоритм абстрактного сравнения описан в спецификации языка JavaScript в пункте 7.2.13. Такое сравнение производится следующим образом:
В принципе, если вы сравниваете значения одного типа, то нет разницы — использовать строгое или абстрактное сравнение, результат всегда будет один и тот же. Почему true == "5" возвращает false? Вы теперь знаете алгоритм, но всё-же давайте попробуем вычислить это выражение вручную, используя алгоритм абстрактного сравнения: true == "5" // подходит 6-ой пункт -> ToNumber(x) == y -> получаем 1 == "5" 1 == "5" // теперь подходит 4-ый -> x == ToNumber(y) -> получаем 1 == 5 1 == 5 // теперь 1-ый пункт -> x === y -> получаем 1 === 5 1 === 5 // по алгоритму строгого сравнения получаем false false P. S. Я точно не знаю, но если вы хотели проверить является ли значение конечным числом, то следует использовать функцию Number.isFinite |
Супер, огромное вам спасибо
|
Часовой пояс GMT +3, время: 08:59. |