Глубокий JavaScript
195 subscribers
15 links
Тонкости в лучше языке программирования. Вопросы, пожелания, комментарии — @igorkamyshev
Download Telegram
​​Стандартная бибилиотка: даты и боль

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

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

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

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

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

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

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

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

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

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

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

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

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

Статья на Medium

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

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

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

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

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

#stdlib
​​Последние три поста рассказывали про итераторы. Использовать в жизни те решения, что в них рассматривались нельзя. Но не из-за итераторов, из-за изменения прототипа числа. Ниже прикреплен код аналогичного решения без грязи.

Итератор

Итерируемыми назвают объекты которые можно "перебирать". Например, массив — итерируемый объект. И список DOM-узлов, строки, Map, Set и arguments тоже.

Многие встроенные в JS штуки (for-of, srepad-оператор) работают с любым итерируемым объектом. Это позволяет подсовывать им свои реализации, получать выразительный и простой код.

Статья на MDN — The iterable protocol

#stdlib