Немного странностей в JavaScript
Пост взят отсюда: https://t.me/jsProger
🤯 Немного странностей в JavaScript.
Как думаете, что будет выведено в консоль ❓
Если вы подумали, что мы получим два false или два true, то вас ждёт сюрприз. Правильный ответ ⬇️
ЧТО? 🙌 КАК ЭТО?
JavaScript для сравнения приводит обе стороны равенства к одному типу. Если число начинается с 0, то JS предполагает, что оно написано в восьмеричном формате, и выполняет необходимые преобразования.
018 — недопустимое восьмеричное число (в восьмеричной системе цифры от 0 до 7). А так-как в числе 018 есть восьмёрка, то JS теперь рассматривает его как обычное десятичное, то есть равное 18. Выходит, что '018' == 18 — выражение является истинным.
А вот 017 — допустимое восьмеричное число, поэтому JS представляет его как 8-ричное число 15, потому что 1×8¹ + 7×8⁰ = 15. А строку '017' он рассматривает как десятичное число, в результате чего получается 17. Но 15 не равно 17, поэтому второе выражение неверно.
Заранее прошу извинить: не получается скопировать ссылку на сам пост.