Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁14 8
Привет! Начнем неделю с очень крутой задачи на знание основ JS. Наверное, большинство может запутаться и дать неправильный ответ, но в этом нет ничего страшного.
Что выведет этот код?
Ответ:
Ничего не будет выведено.
Разбор:
1. Переменная
2. В условии проверяется
Почему так?
Переменные, объявленные через
#JavaScript #interview
Что выведет этот код?
var a = 5;
function f() {
if (a) {
console.log(a);
var a = 10;
}
}
f();
Ответ:
Разбор:
1. Переменная
a внутри функции f поднимается в начало функции, но её значение остаётся undefined до строки var a = 10;.2. В условии проверяется
undefined, поэтому console.log(a) не вызывается.Почему так?
Переменные, объявленные через
var, поднимаются в начало области видимости, но их значение присваивается только на момент выполнения строки с присваиванием.#JavaScript #interview
👍13❤4👏4
Почти каждый из нас работает с TypeScript, и большинство сталкивалось с пересечением типов.
Что такое пересечение типов?
Пересечение типов позволяет объединить несколько типов в один. Это означает, что переменная будет иметь свойства всех типов, которые пересекаются.
Тип
Важно
Когда два типа имеют одинаковые поля с различными типами, это приводит к ошибке. В TypeScript такие поля получают тип
#typescript
Что такое пересечение типов?
Пересечение типов позволяет объединить несколько типов в один. Это означает, что переменная будет иметь свойства всех типов, которые пересекаются.
interface Employee {
name: string;
position: string
}
interface ContactInfo {
email: string;
phone: string
}
type EmployeeContact = Employee & ContactInfo;
const employee: EmployeeContact = {
name: 'Иван',
position: 'Разработчик',
email: 'ivan@google.com',
phone: '+7(900)-000-0000'
};
Тип
EmployeeContact включает в себя как поля из типа Employee, так и поля из типа ContactInfo.Важно
Когда два типа имеют одинаковые поля с различными типами, это приводит к ошибке. В TypeScript такие поля получают тип
never, что делает невозможным присваивание значений. #typescript
👍10🔥5
Разберём ещё один полезный утилити-тип — Awaited 🖼️ . Он позволяет извлечь тип результата из промиса.
Что делает
Проще говоря — убирает
Пример:
Здесь мы комбинируем два утилити-типа —
Сначала
#typescript
Что делает
Awaited?Awaited<T> возвращает тип, в который разрешается промис T.Проще говоря — убирает
Promise-обёртку и достаёт внутренний тип.Пример:
async function fetchData(): Promise<string> {
return "Строка с данными";
}
type ResultType = Awaited<ReturnType<typeof fetchData>>;
// Тип: string
Здесь мы комбинируем два утилити-типа —
ReturnType (о котором я писал в этом посте) и Awaited.Сначала
ReturnType<typeof fetchData> даёт нам Promise<string>, а затем Awaited вытаскивает из него string.#typescript
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍5👏2
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁10 8
Привет! Готовы к короткой рабочей неделе? Давайте начнем ее с формошлепства.
Иногда дизайнеры рисуют сложные формы — поля в одном месте, кнопки в другом. Cамый простой вариант, который приходит в голову — обернуть всё в форму. Да, это работает, но в большинстве случаев это приведёт как минимум к багам, а максимум — к архитектурным проблемам.
Что делать?
Связать кнопку с формой через атрибут
Этот атрибут позволяет кнопке отправлять форму, даже если она расположена вне её, благодаря привязке через
Как это работает?
1.
2. Кнопка вне формы указывает на этот
3. Браузер связывает кнопку с формой и корректно обрабатывает
#HTML #BestPractices
Иногда дизайнеры рисуют сложные формы — поля в одном месте, кнопки в другом. Cамый простой вариант, который приходит в голову — обернуть всё в форму. Да, это работает, но в большинстве случаев это приведёт как минимум к багам, а максимум — к архитектурным проблемам.
Что делать?
Связать кнопку с формой через атрибут
form.Этот атрибут позволяет кнопке отправлять форму, даже если она расположена вне её, благодаря привязке через
id.
<form id="contactForm">
<input type="text" name="name" />
</form>
<!-- Кнопка вне формы -->
<button type="submit" form="contactForm">Сохранить</button>
Как это работает?
1.
<form> получает id.2. Кнопка вне формы указывает на этот
id через атрибут form.3. Браузер связывает кнопку с формой и корректно обрабатывает
submit.#HTML #BestPractices
🔥13👍1😁1
This media is not supported in your browser
VIEW IN TELEGRAM
Видели сайты с красивым скроллом фона? Это легко сделать самому, используя всего одно свойство CSS —
Демо и код тут: CodePen
Поддержка браузерами: CanIUse
#css
background-attachment: fixed;.Демо и код тут: CodePen
Поддержка браузерами: CanIUse
#css
🔥12👍6⚡1
Одна из распространённых ошибок при работе с React — вызов хуков внутри условий, циклов или вложенных функций 🖼️
Пример кода с ошибкой:
Ошибка:
Исправление ошибки:
Почему так происходит?
React запоминает порядок вызова хуков в компоненте и ожидает, что он всегда будет одинаковым. Если хук пропускается из-за условия, на следующем рендере React начинает привязывать хуки не к тем значениям.
Итог
Хуки должны вызываться всегда в одном порядке, без условий и вложенных блоков. Это базовое правило React, нарушение которого приводит к ошибкам в компонентах.
#react
Пример кода с ошибкой:
function Component({ show }) {
if (show) {
useEffect(() => {
console.log("Какой-то эффект");
}, []);
}
return <div>Тут что-то интересное!</div>;
}
Ошибка:
Invalid hook callИсправление ошибки:
function Component({ show }) {
useEffect(() => {
if (show) {
console.log("Какой-то эффект");
}
}, [show]);
return <div>Тут что-то интересное!</div>;
}
Почему так происходит?
React запоминает порядок вызова хуков в компоненте и ожидает, что он всегда будет одинаковым. Если хук пропускается из-за условия, на следующем рендере React начинает привязывать хуки не к тем значениям.
Итог
Хуки должны вызываться всегда в одном порядке, без условий и вложенных блоков. Это базовое правило React, нарушение которого приводит к ошибкам в компонентах.
#react
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥3
На майские беру небольшой перерыв 😋
Советую и вам отложить всю технику и как следует отдохнуть!)
Напоминаю, что у нас есть чат — @TrueFrontenderChat.
В нём можно задавать вопросы, помогать другим и предлагать идеи для будущих постов🐸
Хороших выходных!
Советую и вам отложить всю технику и как следует отдохнуть!)
Напоминаю, что у нас есть чат — @TrueFrontenderChat.
В нём можно задавать вопросы, помогать другим и предлагать идеи для будущих постов
Хороших выходных!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍5 3
Привет! Небольшая задача с собеседования и отправляемся отдыхать 🏠
У нас есть следующий код:
Вопросы:
1. Что будет выведено на каждом шаге при выполнении кода в strict mode и без него?
2. Почему вывод отличается в разных случаях?
Разбор:
1. Метод
2. Метод
3. Метод
4. Метод
Ответ:
1.
2. В non-strict:
3.
4.
#interview #JavaScript
У нас есть следующий код:
const o = {
nameObject: "object o",
printName(a, b, c) {
console.log(this.nameObject);
},
};
// 1
o.printName();
// 2
let print = o.printName;
print();
// 3
print.call(o);
// 4
print.bind(o).call({ nameObject: "call name" });
Вопросы:
1. Что будет выведено на каждом шаге при выполнении кода в strict mode и без него?
2. Почему вывод отличается в разных случаях?
Разбор:
1. Метод
printName вызывается через объект o, и this указывает на сам объект o.2. Метод
printName присваивается переменной print и вызывается как обычная функция. Контекст this теряется, и в non-strict он указывает на глобальный объект (window), у которого нет свойства name. В strict моде this будет undefined, и попытка обращения к this.nameObject вызовет ошибку.3. Метод
call вызывает функцию с переданным контекстом. В данном случае, this указывает на объект o.4. Метод
bind создаёт новую функцию с привязанным контекстом o. После этого вызывается call, который пытается изменить контекст на новый объект, но bind уже установил контекст, и call не может его установить повторно.Ответ:
1.
"object o"2. В non-strict:
undefined. В strict: ошибка3.
"object o"4.
"object o"#interview #JavaScript
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13👀3