на самом деле всё немного сложнее
== сравнивает, приводя типы друг к другу
=== не приводит типы друг к другу
чтобы получить 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)
Global symbol registry
чтобы символы с одинаковыми именами были одной сущностью нужно использовать глобальный реестр символов
запись:
the symbol registry is mostly built by JavaScript's compiler infrastructure, and the symbol registry's content is not available to JavaScript's run-time infrastructure
чтобы символы с одинаковыми именами были одной сущностью нужно использовать глобальный реестр символов
запись:
const id = Symbol.for("id")
чтение:const first = Symbol.keyFor(id)
const second = Symbol.keyFor(id)
first === second // true
the symbol registry is mostly built by JavaScript's compiler infrastructure, and the symbol registry's content is not available to JavaScript's run-time infrastructure
если нам требуется создать много однотипных объектов, мы должны использовать функцию-конструктор и оператор
new
const User = function(name) {
this.name = name;
this.isAdmin = false;
}
const masha = new User("Masha");// { name: "Masha", isAdmin: false }Свойство length автоматически обновляется при изменении массива. Если быть точными, это не количество элементов массива, а наибольший цифровой индекс плюс один.
let fruits = [];
fruits[123] = "Яблоко";
alert( fruits.length ); // 124
Map – это коллекция ключ/значение, как и
Object. Но основное отличие в том, что Map позволяет использовать ключи любого типа.Веб-документация MDN
Map
Объект Map содержит пары ключ-значение и сохраняет порядок вставки.
вот так можно создать Map из object
let obj = {
name: "John",
age: 30
};
let map = new Map(Object.entries(obj));вот так можно создать object из Map:
let map = new Map();
map.set('banana', 1);
map.set('orange', 2);
map.set('meat', 4);
let obj = Object.fromEntries(map);
// готово!
// obj = { banana: 1, orange: 2, meat: 4 }
alert(obj.orange); // 2timestamp — целое число, представляющее собой количество миллисекунд, прошедших с начала 1970 года
const stamp = 999999999276;из таймстампа можно легко получить дату:
new Date(stamp);а из даты можно сделать таймстамп:
// Sun Sep 09 2001 05:46:39 GMT+0400 (Moscow Summer Time)
new Date().getTime()
// 1565845435771