Skip to content

Instantly share code, notes, and snippets.

View dSalieri's full-sized avatar
😒
Dark guardian always there!

dSalieri

😒
Dark guardian always there!
View GitHub Profile
@dSalieri
dSalieri / index.md
Last active February 21, 2024 06:21
Исполнительные контексты в ECMAScript
View index.md

Автор: dSalieri

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

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


Important

Раздел посвященный устройству спецификации [execution contexts][execution-contexts]. Так как спецификация сама отлично описывает данный механизм, то решено было просто перевести с внедрением некоторых пояснительных сносок.

@dSalieri
dSalieri / _index.md
Last active August 13, 2023 03:40
Создание итератора свойств объекта
View _index.md

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

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

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

{
  /// Данный режим влияет на то как будут интерпретироваться флаги, 
  /// match - это полное соответствие флагов к дескрипторам, 
  /// accessor - тогда значения флагов могут быть true или false, если true тогда тогда не важно какое значение имеет дескриптор свойства, если false тогда дескриптор с false или undefined не учитывается при перечислении
@dSalieri
dSalieri / _index.md
Last active October 31, 2023 18:18
Реализация глубокого копирования объекта
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 December 1, 2023 07:44
Реализация специального объекта с определением типов данных
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 February 8, 2024 09:38
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;