Фронтенд Гайд
7.25K subscribers
616 photos
308 videos
287 links
Канал для фронтендеров, много полезных лайфхаков, фичей, макетов, тестов!

Все представлено в виде готового кода, бери и юзай в своем проекте.

По всем вопросам: @it_dashka
Реклама: https://telega.in/channels/frontend_dev5/card
Download Telegram
😁142🤝2
Как сравнить объекты в js ?
Спросят с вероятностью 7%

Сравнение объектов требует особого внимания, поскольку объекты являются ссылочными типами данных. Это значит, что при сравнении объектов вы фактически сравниваете их ссылки в памяти, а не их содержимое. Вот несколько способов сравнения объектов:

1️⃣Сравнение ссылок на объекты

При сравнении объектов с использованием оператора равенства (== или ===), сравниваются их ссылки, а не содержимое.
const obj1 = { a: 1 };
const obj2 = { a: 1 };
const obj3 = obj1;

console.log(obj1 === obj2); // false
console.log(obj1 === obj3); // true


2️⃣Глубокое сравнение объектов

Для сравнения содержимого объектов необходимо проверять каждое свойство. Один из способов — написать рекурсивную функцию для глубокого сравнения.
function deepEqual(obj1, obj2) {
if (obj1 === obj2) {
return true;
}

if (obj1 == null || typeof obj1 !== 'object' ||
obj2 == null || typeof obj2 !== 'object') {
return false;
}

const keys1 = Object.keys(obj1);
const keys2 = Object.keys(obj2);

if (keys1.length !== keys2.length) {
return false;
}

for (let key of keys1) {
if (!keys2.includes(key) || !deepEqual(obj1[key], obj2[key])) {
return false;
}
}

return true;
}

const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { a: 1, b: { c: 2 } };
const obj3 = { a: 1, b: { c: 3 } };

console.log(deepEqual(obj1, obj2)); // true
console.log(deepEqual(obj1, obj3)); // false


3️⃣Использование библиотек

Существуют библиотеки, которые предоставляют функции для глубокого сравнения объектов, например, lodash или deep-equal.
const _ = require('lodash');

const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { a: 1, b: { c: 2 } };
const obj3 = { a: 1, b: { c: 3 } };

console.log(.isEqual(obj1, obj2)); // true
console.log(.isEqual(obj1, obj3)); // false


4️⃣Проверка свойств с учетом порядка и типов

Для простых случаев можно использовать сериализацию объектов с помощью JSON.stringify, однако этот метод имеет ограничения и может не работать с более сложными структурами (например, с функциями, undefined, или символами).
const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { a: 1, b: { c: 2 } };
const obj3 = { a: 1, b: { c: 3 } };

console.log(JSON.stringify(obj1) === JSON.stringify(obj2)); // true
console.log(JSON.stringify(obj1) === JSON.stringify(obj3)); // false


Для сравнения объектов можно использовать:
Сравнение ссылок с ===, если нужно проверить, указывают ли переменные на один и тот же объект.
Глубокое сравнение с помощью рекурсивной функции или библиотек (например, lodash), чтобы проверить равенство содержимого объектов.
Сериализация с JSON.stringify для простых случаев, хотя этот метод имеет ограничения и может не работать с более сложными структурами.
5👍1
HTML. С помощью какого атрибута тега input можно указать типы файлов, которые пользователь сможет загрузить?
Anonymous Poll
44%
type
19%
accept
7%
types
22%
file-types
8%
Посмотреть ответы
🤨1
10👍5🤨4
🤔 Какой HTML элемент используется для задания контактной информации для автора/владельца документа?
Anonymous Poll
18%
<contact>
36%
<author>
33%
<address>
13%
<info>
🤨1
This media is not supported in your browser
VIEW IN TELEGRAM
🌲 Хорошая идея для пет-проекта — 3D-модель дерева, которую можно изменять при помощи разных параметров
🔥2🤨1
This media is not supported in your browser
VIEW IN TELEGRAM
🧭 Анимированный компас вышел из строя и не может найти, где находится страница.
👍1🤨1
This media is not supported in your browser
VIEW IN TELEGRAM
SCSS Washing machine

Стиральная машинка на HTML и SCSS.
🤨3👍2🔥1🥰1👀1
Javascript вопрос: Какой оператор позволяет проверить, принадлежит ли объект к определенному классу (либо наследующему от указанного класса)?
Anonymous Poll
10%
isinstance
31%
instanceof
6%
hasInstance
47%
instanceOf
7%
Посмотреть ответы
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Noisy Risograph Gradient Celestial Body - Генератор градиентов, выполненный с помощью SCSS и JavaScript
Javascript вопрос: Возможно ли сделать так, чтобы функция сама по себе (без внешних переменных или функций) хранила количество ее вызовов?
Anonymous Poll
68%
Да
21%
Нет
11%
Посмотреть ответы
😁32🔥8
Что такое merge и rebase, в чем отличие друг от друга ?
Спросят с вероятностью 7%

merge и rebase — это два способа интеграции изменений из одной ветки в другую в системе контроля версий Git. Оба метода имеют свои особенности и подходят для разных сценариев.

Merge (слияние)

Объединяет изменения из одной ветки в другую, создавая новый коммит слияния (merge commit). Этот метод сохраняет историю всех коммитов, включая все ветвления и слияния.

1️⃣Предположим, у вас есть две ветки: main и feature.
2️⃣В ветке feature вы сделали несколько коммитов.
3️⃣Вы хотите объединить изменения из feature в main.
git checkout main
git merge feature


В результате получается история, включающая коммит слияния:
A---B---C---F---G (main)
\ /
D---E (feature)


Где F и G — коммиты в ветке main, а D и E — коммиты в ветке feature. Коммит G — это коммит слияния, который объединяет изменения из feature в main.

Rebase (перебазирование)

Перемещает или переписывает базу текущей ветки на указанную базу другой ветки. Это переписывает историю коммитов, создавая новые коммиты для каждого из оригинальных коммитов.

1️⃣Предположим, у вас есть две ветки: main и feature.
1️⃣В ветке feature вы сделали несколько коммитов.
3️⃣Вы хотите перенести изменения из feature на текущий конец main.
git checkout feature
git rebase main


В результате история переписывается, как если бы коммиты из feature были сделаны на основе самой свежей версии main:
A---B---C---F---G (main)

D'---E' (feature)


Где D' и E' — это новые коммиты, созданные при перебазировании, основанные на последних изменениях из main.

Основные отличия

1️⃣История коммитов:
Merge: Сохраняет всю историю, включая коммиты слияния. История показывает, когда и как происходили слияния веток.
Rebase: Переписывает историю, делая её линейной. История показывает, как если бы все изменения были сделаны последовательно, без ветвлений.

2️⃣Коммиты слияния:
Merge: Создает новый коммит слияния, который объединяет изменения из двух веток.
Rebase: Не создает коммит слияния. Перебазирование "переносит" коммиты одной ветки на другую.

3️⃣Конфликты:
Merge: Конфликты решаются один раз при слиянии.
Rebase: Конфликты могут возникнуть на каждом коммите, и их нужно решать поэтапно.

4️⃣Применение:
Merge: Хорош для сохранения полного контекста истории разработки, особенно в командной работе.
Rebase: Хорош для поддержания чистой, линейной истории, особенно перед слиянием ветки в основную ветку, например, main или master.

Когда использовать

Используйте merge, когда вы хотите сохранить всю историю разработки, включая все ветвления и слияния. Это полезно для командной работы, где важно видеть весь контекст изменений.
Используйте rebase, когда вы хотите поддерживать чистую и линейную историю. Это особенно полезно для интеграции изменений в основную ветку перед созданием pull request'ов, чтобы история коммитов была более понятной.

Merge объединяет изменения из одной ветки в другую, создавая новый коммит слияния и сохраняя всю историю. Rebase переписывает историю, делая её линейной, перемещая коммиты из одной ветки на базу другой.
8
Javascript вопрос: Может ли использоваться деструктуризация в объявлении функции в блоке перечисления аргументов (то есть, в круглых скобках, перед телом функции)?
Anonymous Poll
77%
Да
16%
Нет
7%
Посмотреть ответы
Требуются парни и девушки в возрасте 19–40 лет, желающие работать в сфере IT.

Опыт в программировании не нужен.

Завтра запускаем бесплатный онлайн-интенсив по Frontend-разработке, где будем показывать, как разрабатывать сайты и веб-приложения.

За 7 дней обучения ты:

1. Создашь полноценный веб-сайт на HTML и CSS;
2. Оживишь страницу с помощью JavaScript;
3. Используешь фронтенд-фреймворк Angular;
4. Подключишь Backend и загрузишь сайт на хостинг;
5. Получишь советы по доработке своего проекта;
6. Узнаешь сколько можно зарабатывать и как работать;
7. Получишь в подарок чек-лист «45 мест для поиска работы».

А главное, ты увидишь, что разрабатывать сайты и приложения не так сложно, как кажется. И поймёшь, как тебе развиваться в этой профессии, чтобы уже в следующем году зарабатывать от 1000$ на вёрстке сайтов.

👉 Проскочить на интенсив бесплатно

🔥 С нас обучение, практика и помощь с выходом на фриланс.
🤨5👍2🔥1😁1
👏171
HTML вопрос: Семантически тег <i> предназначен для текста, имеющего особое значение или на который следует сделать акцент, верно?
Anonymous Poll
52%
Да
41%
Нет
7%
Посмотреть ответы
😁18💯3