Глубокий JavaScript – Telegram
Глубокий JavaScript
165 subscribers
15 links
Тонкости в лучше языке программирования. Вопросы, пожелания, комментарии — @igorkamyshev
Download Telegram
Channel name was changed to «Глубокий JavaScript»
Channel photo updated
Хороший программист должен знать как работает язык, на котором он пишет. Причем, желательно очень хорошо. Не ради собеседований, ради понимания.

В этом канале мы будем разбирать странные, неочевидные и местами противоречивые особенности JS (и других около стоящих языков), говорить о возможностях стандартной библиотеки и о более выразительных аналогах, изучать лучшие практики написания JS-кода.
​​Стандартная бибилиотка: даты и боль

В новом JS появилась функция форматирования даты в локаль-зависимом виде.

Это простой способ показать дату в привычном пользователю формате. При вызове без параметров локаль подтянеться из среды выполнения.

Использовать в Node.js эту функцию нужно осторожно (например при отправке писем пользователям). Если не указать локаль, то будет использована локаль сервера, она часто не совпадает с локалью пользователей.

На MDN есть неплохая статья про эту функцию.

#stdlib
​​Стандартная бибилиотка: это массив

Узнать, является ли нечто массивом не так просто, как кажется. typeof вернет object, а многие свойства массивов присущи и другим объектам.

Если код выполняется в среде поддерживающей ES5+ (или транспайлится), то доступна функция Array.isArray которая проверяет, евляется ли аргумент массивом. В таком случае можно выкинуть _.isArray и пользоваться стандартной бибилиотекой.

Я страстно люблю lodash, но всему свое место и время.

#stdlib
Деньги

Работать с денежными значениями сложно в любом языке, но в JS — особенно. Тут и проблемы с разными валютами, и опасность хранения сумм как чисел с плавающей точкой.

В JS нет подходящих встроенных типов. Money и Decimal даже не планируются, а BigInt еще на stage3 (не принят в стандарт). Потому приходится использовать сторонние библиотеки или писать свои "велосипеды".

Тематическая статья — Как работать с денежными значениями в JavaScript


BigInt

В браузере: поддерживается в новых Chromium, для остальных браузеров — полифил jsbi и клевый сторонний Babel-плагин

В Node.js: в v10.4 добавили поддержку BigInt.

Что такое BigInt и почему он важен

#link
​​Стандартная бибилиотка: юникодные строки

При обработке пользовательского ввода часто приходится сравнивать его значение с референсом. При наивном сравнении легко допустить ошибку из-за возможности модификации символов в UNICODE.

В типографике используются диакритические знаки для модификации символов.

Для реализации таких изменений в UNICODE предоставили возможность композиции символов.

Сравнение таких символов через === в JavaScript даст false, поэтому для облегчения жизни существует метод String.prototype.normalize(), который возвращает нормализованную строку.

Статья на Medium

#stdlib
​​Стандартная бибилиотка: состояние регулярки

На первый взгляд кажется, что регулярные выражения не могут хранить в себе состояние. Это не так.

Функции test и exec начинают проверять строку с последнего совпадения, если регулярное выражение имеет флаг global (g).

Обойти это можно через свойство lastIndex. Нужно установить его на 0 и поиск начнется снова с начала строки.

Если поиск ничего не нашел, это свойство автоматически сбрасывается на 0.

#stdlib