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)
(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)
главная идея прототипного наследования заключается в том что объект может указывать на другой объект и наследовать все его свойства
главная цель в том чтобы позволить множеству экземпляров объекта использовать общие свойства
promise это объект который содержит своё состояние. у промиса бывает три типа состояния:
pending, fulfilled, rejected
pending, fulfilled, rejected
Способ использования, в общих чертах, такой:
1 Код, которому надо сделать что-то асинхронно, создаёт объект
2 Внешний код, получив
3 По завершении процесса асинхронный код переводит
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"
на самом деле всё немного сложнее
== сравнивает, приводя типы друг к другу
=== не приводит типы друг к другу
чтобы получить pure component в функциональном компоненте нужно его весь завернуть в React.memo
code_notes
Why Do We Write super(props) super(props) ссылается к родительскому конструктору. привязывает родительские методы к дочернему элементу если мы не прокидываем props, то они всё равно привяжутся из родительского конструктора, но только после того, как весь…
до объявления super мы не можем использовать this
Function Declaration
Function Expression
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 // true3. способы нормально скопировать объект
let a = {};
let b = {}; // два независимых объекта
alert( a == b ); // false
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)