code_notes
71 subscribers
136 photos
1 video
134 links
учусь делать веб

обратная связь: t.me/dmorenogogoleva
Download Telegram
crossorigin html attribute allow using external image in canvas

(The crossorigin attribute is a CORS settings attribute. Its purpose is to allow images from third-party sites that allow cross-origin access to be used with canvas)
главная идея прототипного наследования заключается в том что объект может указывать на другой объект и наследовать все его свойства
главная цель в том чтобы позволить множеству экземпляров объекта использовать общие свойства
this это указатель на текущий объект
promise это объект который содержит своё состояние. у промиса бывает три типа состояния:
pending, fulfilled, rejected
Способ использования, в общих чертах, такой:
1 Код, которому надо сделать что-то асинхронно, создаёт объект promise и возвращает его.
2 Внешний код, получив promise, навешивает на него обработчики.
3 По завершении процесса асинхронный код переводит promise в состояние fulfilled (с результатом) или rejected (с ошибкой). При этом автоматически вызываются соответствующие обработчики во внешнем коде.
в js переменные не имеют типа, тип имеют только значения, хранящиеся в переменных

var a;
typeof a; // "undefined"

a = "hello world";
typeof a; // "string"

a = 42;
typeof a; // "number"
a = null;
typeof a; // "object"
массивы и функции стоит рассматривать как подтипы объектов
== проверяет только значения
=== проверяет значения и типы
на самом деле всё немного сложнее

== сравнивает, приводя типы друг к другу
=== не приводит типы друг к другу
чтобы получить pure component в функциональном компоненте нужно его весь завернуть в React.memo
Function Declaration
function sum(a, b) {
let result = a + b;

return result;
}


Function Expression
let sum = function(a, b) {
let result = a + b;

return result;
};
свойства объекта упорядочены особым образом: свойства с целочисленными ключами сортируются по возрастанию, остальные располагаются в порядке создания

(термин «целочисленное свойство» означает строку, которая может быть преобразована в целое число и обратно без изменений.)
let codes = {
"49": "Германия",
"41": "Швейцария",
"44": "Великобритания",
// ..,
"1": "США"
};

for (let code in codes) {
alert(code); // 1, 41, 44, 49
}
1. при копировании переменной, указывающей на объект, копируется ссылка на объект
let user = { name: "John" };
let admin = user; // копируется ссылка

2. объекты равны только если это один и тот же объект
user === admin // true

let a = {};
let b = {}; // два независимых объекта

alert( a == b ); // false

3. способы нормально скопировать объект
let user = {
name: "John",
age: 30
};

- let clone = Object.assign({}, user);

- let clone2 = { ...user }

- let clone3 = JSON.parse(JSON.stringify(user))

!глубокое клонирование!
- let clone4 = _.cloneDeep(user);
https://lodash.com/docs/4.17.15#cloneDeep

4. проверить объект на пустоту
Object.keys(user).length == 0
убрать повторяющиеся элементы массива

1. arr.filter((el, index) => arr.indexOf(el) >= index)

2. Array.from(new Set(arr))
Symbol

примитивный тип данных
все символы уникальны
let id1 = Symbol("id");
let id2 = Symbol("id");

alert(id1 == id2); // false

Symbol можно использовать как ключ в объекте:
let id = Symbol("id");

let user = {
name: "Егор",
[id]: 123
};

прочитать все символы объекта:
Object.getOwnPropertySymbols(obj)