Skip to content

Instantly share code, notes, and snippets.

Avatar
😒
Dark guardian always there!

dSalieri

😒
Dark guardian always there!
View GitHub Profile
@dSalieri
dSalieri / _index.md
Last active March 5, 2023 13:57
Создание итератора свойств объекта
View _index.md

Цель: Итерация по свойствам объекта с возможностью требований к свойствам.

Настройки: Принимает на вход два аргумента, первый это любой объект, свойства которого будут перечислены, второй аргумент это объект опций, но вместо объекта можно указать функцию, которая будет задавать правила по которому будет отсеивать свойства.

Номенклатура объекта опций:

{
  /// Данный режим влияет на то как будут интерпретироваться флаги, 
  /// match - это полное соответствие флагов к дескрипторам, 
  /// accessor - тогда значения флагов могут быть true или false, если true тогда тогда не важно какое значение имеет дескриптор свойства, если false тогда дескриптор с false или undefined не учитывается при перечислении
@dSalieri
dSalieri / _index.md
Last active February 26, 2023 09:59
Реализация глубокого копирования объекта
View _index.md

Цель: Добиться копирования объекта в глубину.

Примечания:

  1. Копирование работает с: undefined, null, number, bigint, string, boolean, array, object.
  2. Копирование не работает с: symbol, function. Они переносятся в клонируемый объект как есть (это из-за того как устроены внутри).
  3. Копирование поддерживает другие сложные объекты, но реализация лежит на ваших плечах (внизу есть пример как это сделать).
  4. Поддержка тех типов что не предоставлена, будут пропущены, ключи для них созданы не будут, но есть специальный флаг, который позволит сделать попытку скопировать свойство.
  5. Копирование работает со всеми типами свойств, дескриптор каждого свойства учитывается.

Опции:

@dSalieri
dSalieri / _index.md
Last active February 22, 2023 02:20
Реализация вложенного Object.assign
View _index.md

Цель: Реализация вложенного присваивания, алгоритм основывается на алгоритме из спецификации [Object.assign][assign] ECMAScript.

/// Демонстрация
const a = {
  a: 1, 
  b: 2, 
  c: 3, 
  obj: {
 aa: 11, 
@dSalieri
dSalieri / _index.js
Last active January 20, 2023 05:08
Объект для чисел с плавающей точкой (решение проблемы неточности плавающих чисел)
View _index.js
const BigFloat = (function () {
const obtainData = (a, b) => {
[a, b].forEach((v) => {
if (typeof v !== "string") throw TypeError("Arguments have incorrect type, should be string");
});
return {
a: {
sign: a.includes("-") ? -1n : 1n,
intAndFloat: Object.assign(["0", "0"], a.split(".")).map((v) => {
BigInt(v);
@dSalieri
dSalieri / _index.md
Last active February 20, 2023 18:25
Реализация специального объекта с определением типов данных
View _index.md

Цель: Расширить определение типов данных

@dSalieri
dSalieri / _index.md
Last active November 20, 2022 05:36
Redux architecture
View _index.md

Этот документ предназначен для того чтобы понять как работает архитектура Redux, а именно так называемого хранилища. Здесь предоставлены различные функции для использования их в примерах Redux архитектуры.

Субстракт реализации вытащен из исходников .ts и переписан под .js. Так что это реальное представление Redux в ее основной сути.

Приятного разбора :)

@dSalieri
dSalieri / index.md
Last active December 21, 2022 00:56
Middleware в Koa, koa-router
View index.md

Данный документ подготовлен для понимания того как работают композиции middleware в Koa

Также этот документ описывает кое-какие части механизмов Koa и koa-router


Композиции middlewares в Koa образуются через интерфейс Koa.prototype.use:

const app = new Koa();
@dSalieri
dSalieri / index.md
Last active April 21, 2023 08:50
Promise изнутри
View index.md

Автор: dSalieri

Версия ECMAScript, используемая в объяснении: Draft ECMA-262 / June 24, 2022

Версия WHATWG, используемая в объяснении: Living Standard - 22 August 2022

Последнее изменение документа: 13.12.2022


@dSalieri
dSalieri / index.md
Last active August 17, 2022 17:05
Tracking user activation (whatwg)
View index.md

Этот текст был составлен как проблема и помощь в понимании некоторых вещей по спецификации whatwg. Текст проблемы не был принят во внимание и проигнорирован, а мое объяснение было посоветовано разместить в своем блоге.

Текст ниже является объясняющей частью (можете воспользоваться переводчиком, перевод будет сносным, я смотрел). Не удалять же мне эти интересные находки, может кому-то это будет полезным.

I noticed that Chrome APIs gives ~5000ms for APIs that using transient activation in their algorithms for successfull completion

/// measuring only for Chrome
(() => {
    let timerId = null;
    let start = null;
@dSalieri
dSalieri / _index.md
Last active January 25, 2023 12:26
IsConstructor попытка реализовать проверку на конструктор
View _index.md

Чтобы проверить является ли функция конструкторной, нужно посмотреть есть ли у нее поле [[Constructor]]. Нет ни единого способа проверить это напрямую. Но есть два способа, которые мне известны:

  • Проверить поля, которые мы можем просмотреть с помощью кода js
  • Проверить поле [[Constructor]], используя интерфейсы, которые это делают.

К первому типу относится реализация prototype.js, ко второму bind.js, proxy.js и reflect.js. Также существует одна весомая разница; при проверке второго типа мы используем [[Constructor]] поле для создания объекта, чтобы убедиться что объект создан, что докажет его существование, но в этом и опасность если произойдет ошибка в поле [[Constructor]] ваша функция окажется бракованной. Первый тип же более безопасен он не запускает никакие функции, а просто смотрит наличие полей, в этом тоже есть своя опасность, так как отсутствие некоторых полей может вернуть неверный вариант.

Допустим есть такой конструктор Proxy, у него нет внешних признаков чтобы можно было опр