Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy
Контакт для рекламы: @sendme_ads
Post #100
6.93K
- 🤔 88
- 👍 7
- ❤ 2
- 👀 2
FR @easy_javascript_ru
Showing posts older than #102 · Back to latest
const [count, setCount] = useState(0);
useEffect(() => {
document.title = Вы нажали ${count} раз;
}, [count]); // Зависимость от состояния countconst value = useContext(MyContext);
useState для более сложного управления состоянием, использует концепцию редьюсера для обработки сложных изменений состояния.const [state, dispatch] = useReducer(reducer, initialState);
const memoizedCallback = useCallback(() => {
doSomething(a, b);
}, [a, b]);const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
const myRef = useRef(initialValue);
useImperativeHandle(ref, () => ({
focus: () => {
myTextInput.current.focus();
}
}));useEffect, но выполняется синхронно после всех изменений DOM. Используется для чтения макета из DOM и реагирования на эти изменения синхронно. useLayoutEffect(() => {
// Измерения или взаимодействия с DOM
}, [dependencies]);useDebugValue(value);
useState, useEffect, useContext) позволяют добавлять состояние, работать с побочными эффектами и использовать контекст в функциональных компонентахdevelop.release сливается с master и с develop.master, и после исправления сразу же сливаются обратно в master и develop.var, let и const. Рассмотрим каждый из них подробнее:var:let:{}, в которых она была объявлена, например, внутри циклов, условий или блоков кода.var, доступ к переменной до её объявления вызывает ошибку ReferenceError.const:let, имеет блочную область видимости.let, с теми же ограничениями доступа до объявления.const необходимо сразу же инициализировать её значением.// Использование var
var x = 5;
console.log(x); // 5
var x = 10; // Переопределение возможно
console.log(x); // 10
// Использование let
let y = "hello";
console.log(y); // hello
y = "world"; // Переопределение значения допустимо
console.log(y); // world
// let y = "test"; // Ошибка: Identifier 'y' has already been declared
// Использование const
const z = { message: "constant" };
console.log(z.message); // constant
z.message = "changed"; // Изменение свойства объекта допустимо
console.log(z.message); // changed
// const z = "new"; // Ошибка: Identifier 'z' has already been declared
var имеет функциональную область видимости, поднимается и позволяет переопределение переменных.let имеет блочную область видимости, поднимается с ограничением доступа до объявления и позволяет изменять значения, но не допускает повторное объявление в той же области видимости.const также имеет блочную область видимости, требует инициализации при объявлении, запрещает изменение присвоенного значения (хотя позволяет изменять содержимое объектов) и не допускает повторного объявления.new Map() — создаёт новую коллекцию.map.set(key, value) — устанавливает значение value для ключа key.map.get(key) — возвращает значение, ассоциированное с ключом key.map.has(key) — возвращает true, если key существует в коллекции.map.delete(key) — удаляет элемент по ключу key.map.clear() — удаляет все элементы из коллекции.map.size — возвращает количество элементов в коллекции.let map = new Map();
map.set('1', 'str1'); // строка в качестве ключа
map.set(1, 'num1'); // цифра как ключ
map.set(true, 'bool1'); // булево значение как ключ
console.log(map.get(1)); // num1
console.log(map.get('1')); // str1
console.log(map.size); // 3
Map, он сохраняет порядок вставки элементов.new Set() — создаёт новую коллекцию.set.add(value) — добавляет значение value в коллекцию, если его там ещё нет.set.delete(value) — удаляет значение value из коллекции.set.has(value) — возвращает true, если значение value присутствует в коллекции.set.clear() — удаляет все элементы из коллекции.set.size — возвращает количество элементов в коллекции.let set = new Set();
let john = { name: "John" };
let pete = { name: "Pete" };
let mary = { name: "Mary" };
// посещения, некоторые пользователи заходят многократно
set.add(john);
set.add(pete);
set.add(mary);
set.add(john);
set.add(mary);
console.log(set.size); // 3
for (let user of set) {
console.log(user.name); // John, Pete, Mary
}
Map и Set представляют собой мощные структуры данных, которые делают код более чистым и читаемым, а также предоставляют удобные методы для работы с данными. Map идеально подходит для хранения пар ключ/значение с уникальными ключами, в то время как Set используется для хранения уникальных значений.!important, имеет наивысший приоритет независимо от специфичности селектора. Использование !important следует минимизировать, поскольку это может затруднить дальнейшее управление стилями./* Браузерный стиль по умолчанию /
p {
color: black;
}
/ Стиль пользователя /
p {
color: blue;
}
/ Стиль автора /
p {
color: green;
}
/ Специфичный селектор имеет больший приоритет /
.special-p {
color: red;
}
/ Использование !important */
p {
color: purple !important;
}
p) заданы разные цвета, применится цвет purple, так как он объявлен с использованием !important. Однако для параграфа с классом .special-p цвет будет red, поскольку специфичность селектора .special-p выше, чем у простого тегового селектора p, и !important не влияет на селекторы с более высокой специфичностью, если они объявлены после.// Версия 1.0.0: Исходная версия вашей библиотеки
// Версия 1.1.0: Добавление новой функции, совместимой с предыдущими версиями
// Версия 1.1.1: Исправление ошибки в новой функции, не влияющее на существующий API
// Версия 2.0.0: Удаление старой функции, что делает эту версию несовместимой с кодом, написанным для версии 1.x.x
color, font-family, font-size, являются такими. Это значит, что если вы установите одно из этих свойств для элемента, то оно автоматически применится ко всем его дочерним элементам, если только для них явно не заданы свои значения этих свойств.html). Если и у корневого элемента свойство не задано, используется значение по умолчанию, определенное в спецификации.<!DOCTYPE html>
<html>
<head>
<style>
body {
color: blue; /* Все текстовые элементы внутри body будут синими, если только не задано иное /
font-family: Arial, sans-serif; / Все текстовые элементы наследуют этот шрифт */
}
</style>
</head>
<body>
<p>Этот текст будет синим и Arial, потому что он наследует стили от body.</p>
<div style="color: green;">
<p>Этот текст будет зеленым и Arial, потому что цвет переопределен на зеленый, а шрифт наследуется от body.</p>
</div>
</body>
</html>
inherit: Значение inherit можно присвоить любому CSS-свойству, чтобы указать элементу наследовать значение этого свойства от своего родителя, даже если это свойство обычно не наследуется. initial: Сбрасывает свойство к его значению по умолчанию, игнорируя наследование. unset: Действует как inherit, если свойство наследуемое, и как initial в противном случае.<!DOCTYPE>: Определяет тип документа и версию HTML.<html>: Корневой элемент веб-страницы.<head>: Содержит метаинформацию о документе, такую как заголовок, ссылки на стили и скрипты.<title>: Задаёт заголовок веб-страницы, отображаемый в заголовке вкладки браузера.<body>: Содержит всё содержимое веб-страницы, видимое пользователю.<header>: Определяет заголовок веб-страницы или раздела.<footer>: Определяет подвал веб-страницы или раздела.<nav>: Определяет навигационные ссылки.<article>: Определяет независимый контент.<section>: Определяет раздел в документе.<aside>: Определяет контент, отделённый от основного содержимого (как правило, боковые панели).<h1> - <h6>: Заголовки разного уровня, где <h1> — самый важный заголовок.<p>: Определяет абзац.<br>: Перенос строки. : Выделяет текст жирным шрифтом.<ol>: Нумерованный список.<ul>: Маркированный список.<li>: Элемент списка.<img>: Изображение.<figure> и <figcaption>: Используются для вставки изображений или иллюстраций с подписями.<form>: Определяет форму для сбора пользовательского ввода.<input>: Поле ввода.<textarea>: Многострочное поле ввода текста.<button>: Кнопка.<select> и <option>: Выпадающий список и его элементы.<label>: Метка для элемента формы.<table>: Таблица.<tr>: Строка таблицы.<td>: Ячейка таблицы.<th>: Заголовочная ячейка таблицы.<thead>, <tbody>, <tfoot>: Группируют заголовки, основное тело и подвал таблицы соответственно.<video> и <audio>: Для встраивания видео и аудио контента.<canvas>: Используется для рисования графики с помощью JavaScript. <svg>: Для встраивания векторной графики.var, let или const, а также для аргументов функций, которым не были переданы значения, и для возвращаемого значения функций, которые не возвращают явно какое-либо значение.typeof undefined вернёт "undefined".undefined, он является объектом. То есть typeof null вернёт "object", что может быть немного запутывающим. Это известная особенность языка, сохраняемая для обратной совместимости.undefined для проверки, была ли переменная инициализирована или определена функция/параметр.null в качестве намеренного отсутствия какого-либо объектного значения. Это полезно, например, при инициализации переменной, которая позже должна быть назначена объекту.==) null и undefined считаются равными, потому что оба представляют отсутствие значения. То есть null == undefined вернёт true.===), которое учитывает тип данных, они считаются различными: null === undefined вернёт false.function add(a, b) {
return a + b;
}
Функция add является чистой, потому что она всегда возвращает одно и то же значение для одних и тех же аргументов и не имеет побочных эффектов.let counter = 0;
function incrementCounter(value) {
counter += value;
}
incrementCounter не является чистой, так как она изменяет глобальную переменную counter, что является побочным эффектом. Также результат выполнения функции зависит от внешнего состояния (значения counter), что нарушает принцип детерминированности.true (истина), если сравнение верно, и false (ложь), если нет. Они играют ключевую роль в управлении потоком выполнения программы, позволяя выполнить определённый код в зависимости от результатов сравнения.==): Проверяет равенство двух значений после приведения их к одному типу. Например, 5 == '5' вернёт true.!=): Проверяет, не равны ли два значения после приведения их к одному типу. Например, 5 != '5' вернёт false.===): Проверяет равенство двух значений без приведения типов, то есть значения должны быть одного типа. Например, 5 === '5' вернёт false.!==): Проверяет, не равны ли два значения без приведения типов. Например, 5 !== '5' вернёт true.>): Проверяет, больше ли первое значение, чем второе. Например, 5 > 3 вернёт true.>=): Проверяет, больше ли первое значение или равно второму. Например, 5 >= 5 вернёт true.<): Проверяет, меньше ли первое значение, чем второе. Например, 3 < 5 вернёт true.<=): Проверяет, меньше ли первое значение или равно второму. Например, 5 <= 5 вернёт true.console.log(5 == '5'); // true, потому что значения равны после приведения типов
console.log(5 === '5'); // false, потому что значения разных типов
console.log(5 != '4'); // true, потому что значения не равны после приведения типов
console.log(5 !== '5'); // true, потому что значения разных типов
console.log(5 > 3); // true
console.log(5 >= 5); // true
console.log(3 < 5); // true
console.log(5 <= 5); // true
== и !=) происходит автоматическое приведение типов, что может привести к неожиданным результатам. Поэтому рекомендуется использовать строгие операторы равенства (=== и !==) для точного сравнения значений.if, else if, switch) и циклах (while, for), позволяя управлять потоком выполнения программы в зависимости от результатов сравнения.console.log(this === window); // в браузере вернет true
"use strict") this будет undefined, если функция вызвана не как метод объекта. function show() {
console.log(this === window); // true в браузере в нестрогом режиме
console.log(this); // undefined в строгом режиме
}
show();const obj = {
myMethod() {
console.log(this);
}
};
obj.myMethod(); // this ссылается на objnew, он ссылается на вновь созданный объект.function Person(name) {
this.name = name;
}
const person = new Person("Alice");
console.log(person.name); // Aliceconst obj = {
method: function() {
const arrowFunc = () => console.log(this);
arrowFunc(); // this ссылается на obj
}
};
obj.method();call, apply и bind можно явно указать контекст для функции.function show() {
console.log(this);
}
const obj = {name: "Explicit context"};
show.call(obj); // this в show() ссылается на objvar имеют функциональную область видимости, что означает, что переменная, объявленная с помощью нее внутри функции, доступна везде в этой функции.var, let имеет блочную область видимости. Это означает, что переменная, объявленная с помощью нее в блоке (например, в цикле или условном операторе), будет доступна только в пределах этого блока.undefined.ReferenceError. Это поведение известно как "временная мертвая зона" (temporal dead zone, TDZ).window в браузерах).if (true) {
var varVariable = "Я доступен везде в функции";
let letVariable = "Я доступен только в этом блоке";
}console.log(varVariable); // Работает, потому что var имеет функциональную область видимости
console.log(letVariable); // Ошибка, потому что let имеет блочную область видимости
console.log(a); // undefined из-за поднятия
var a = 3;
console.log(b); // ReferenceError из-за временной мертвой зоны
let b = 4;
let предоставляет более строгую и предсказуемую область видимости переменных, что улучшает управляемость кодом и уменьшает вероятность ошибок, связанных с неожиданным доступом или изменением данных. var может быть полезен, когда нужна функциональная область видимости, но сейчас let и const (для объявления констант) являются предпочтительными вариантами для управления переменными.var объявляет переменную, доступную во всей функции, а let ограничивает видимость переменной блоком, в котором она объявлена.then, catch, finallyqueueMicrotask()setTimeoutsetIntervalsetImmediate (Node.js)setTimeout(() => console.log('Макро-задача 1'), 0);
Promise.resolve().then(() => console.log('Микро-задача 1'));
setTimeout(() => console.log('Макро-задача 2'), 0);
Promise.resolve().then(() => console.log('Микро-задача 2'));