Какие способы изоляции стилей существуют ?
Спросят с вероятностью 20%
Изоляция стилей в веб-разработке важна для предотвращения конфликтов CSS и обеспечения того, чтобы стили одного компонента или раздела страницы не влияли на другие. Существует несколько таких подходов:
1️⃣ Использование уникальных имен классов
Это самый простой способ избежать конфликтов. Может быть достигнуто с помощью методологий именования, таких как BEM (Блок, Элемент, Модификатор), которая предлагает чёткую структуру для именования классов.
2️⃣ CSS-модули
Они представляют собой подход, при котором классы и идентификаторы, определенные в CSS-файле, автоматически преобразуются в уникальные имена. Это позволяет избежать конфликтов имен классов между различными компонентами. Они поддерживаются в сборщиках, таких как Webpack, и во фреймворках, например, в Create React App.
3️⃣ CSS-in-JS
Библиотеки CSS-in-JS, такие как Styled-components и Emotion, позволяют писать CSS прямо в JavaScript-файлах. Это обеспечивает полную изоляцию стилей, поскольку стили применяются непосредственно к компонентам, и конфликты имен классов исключаются.
4️⃣ Shadow DOM
Технология, позволяющая инкапсулировать DOM-дерево и стили компонента так, что они не влияют на основной документ. Это ключевая часть Web Components и позволяет создавать полностью изолированные компоненты.
5️⃣ Scoped CSS
Некоторые современные фреймворки и инструменты, такие как Vue.js, предлагают возможность использования scoped стилей, где CSS применяется исключительно к компоненту, в котором он объявлен, без воздействия на остальную часть приложения.
6️⃣ Использование IFRAME
Размещение контента внутри
7️⃣ CSS-переменные для темизации
Сами по себе не обеспечивают изоляцию, их можно использовать для создания гибкой системы тем, которая позволяет контролировать влияние глобальных стилей на компоненты и облегчает поддержание стилевой согласованности.
Изоляция стилей — важный аспект разработки надёжных и масштабируемых веб-приложений. Выбор метода зависит от конкретных требований проекта, технологического стека и предпочтений разработчика. Использование современных инструментов и подходов, таких как CSS-модули, CSS-in-JS и Web Components, может значительно упростить управление стилями и повысить качество конечного продукта.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 20%
Изоляция стилей в веб-разработке важна для предотвращения конфликтов CSS и обеспечения того, чтобы стили одного компонента или раздела страницы не влияли на другие. Существует несколько таких подходов:
1️⃣ Использование уникальных имен классов
Это самый простой способ избежать конфликтов. Может быть достигнуто с помощью методологий именования, таких как BEM (Блок, Элемент, Модификатор), которая предлагает чёткую структуру для именования классов.
2️⃣ CSS-модули
Они представляют собой подход, при котором классы и идентификаторы, определенные в CSS-файле, автоматически преобразуются в уникальные имена. Это позволяет избежать конфликтов имен классов между различными компонентами. Они поддерживаются в сборщиках, таких как Webpack, и во фреймворках, например, в Create React App.
3️⃣ CSS-in-JS
Библиотеки CSS-in-JS, такие как Styled-components и Emotion, позволяют писать CSS прямо в JavaScript-файлах. Это обеспечивает полную изоляцию стилей, поскольку стили применяются непосредственно к компонентам, и конфликты имен классов исключаются.
4️⃣ Shadow DOM
Технология, позволяющая инкапсулировать DOM-дерево и стили компонента так, что они не влияют на основной документ. Это ключевая часть Web Components и позволяет создавать полностью изолированные компоненты.
5️⃣ Scoped CSS
Некоторые современные фреймворки и инструменты, такие как Vue.js, предлагают возможность использования scoped стилей, где CSS применяется исключительно к компоненту, в котором он объявлен, без воздействия на остальную часть приложения.
6️⃣ Использование IFRAME
Размещение контента внутри
<iframe>
позволяет полностью изолировать его стили от остальной части страницы. Это крайний способ, который может быть полезен для встраивания стороннего контента, но он приносит дополнительную сложность и ограничения.7️⃣ CSS-переменные для темизации
Сами по себе не обеспечивают изоляцию, их можно использовать для создания гибкой системы тем, которая позволяет контролировать влияние глобальных стилей на компоненты и облегчает поддержание стилевой согласованности.
Изоляция стилей — важный аспект разработки надёжных и масштабируемых веб-приложений. Выбор метода зависит от конкретных требований проекта, технологического стека и предпочтений разработчика. Использование современных инструментов и подходов, таких как CSS-модули, CSS-in-JS и Web Components, может значительно упростить управление стилями и повысить качество конечного продукта.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41❤4🔥2
Почему react лучше, чем jquerry ?
Спросят с вероятностью 7%
Сравнивать React и jQuery не совсем корректно, поскольку они решают разные задачи в разработке веб-приложений. jQuery — это библиотека, которая упрощает манипуляции с DOM, обработку событий, анимации и Ajax-запросы, делая код более кратким и понятным. React — это библиотека для создания пользовательских интерфейсов, которая позволяет строить интерактивные UI с использованием компонентного подхода.
Тем не менее, можно выделить несколько причин, по которым можно предпочесть React jQuery для современных веб-приложений:
1️⃣ Компонентный подход: Основан на компонентах, что позволяет создавать переиспользуемые, независимые части интерфейса. Это делает код более организованным и упрощает его поддержку.
2️⃣ Виртуальный DOM: Использует виртуальный DOM, что позволяет оптимизировать обновление интерфейса и повысить производительность приложения, минимизируя количество манипуляций с реальным DOM.
3️⃣ Однонаправленный поток данных: Реализует паттерн однонаправленного потока данных, который облегчает понимание того, как данные передаются через приложение и как состояние компонента влияет на его отображение.
4️⃣ Широкие возможности для разработки сложных приложений: Лучше подходит для разработки больших и сложных веб-приложений, где требуется высокая степень интерактивности и динамичности интерфейса.
5️⃣ Экосистема и сообщество: Имеет огромное сообщество разработчиков и богатую экосистему, включая множество готовых решений, библиотек и инструментов, что облегчает разработку и внедрение новых функций.
6️⃣ Интеграция с современными архитектурами и инструментами разработки: Легко интегрируется с современными архитектурами веб-разработки, такими как Redux для управления состоянием приложения, и с инструментами разработки, такими как Webpack, Babel и другие.
7️⃣ Поддержка из коробки: Создание интерактивных пользовательских интерфейсов с ним часто требует меньше кода и меньше усилий для поддержания его в актуальном состоянии по сравнению с использованием jQuery для тех же целей.
Хотя React предлагает множество преимуществ для разработки современных веб-приложений, выбор между React и jQuery зависит от конкретных требований проекта. Для простых веб-сайтов или задач, где необходимо быстро добавить интерактивность без переписывания существующего кода, jQuery может быть более подходящим выбором. Для создания сложных пользовательских интерфейсов с высокой степенью взаимодействия React предлагает более современный и мощный инструментарий.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 7%
Сравнивать React и jQuery не совсем корректно, поскольку они решают разные задачи в разработке веб-приложений. jQuery — это библиотека, которая упрощает манипуляции с DOM, обработку событий, анимации и Ajax-запросы, делая код более кратким и понятным. React — это библиотека для создания пользовательских интерфейсов, которая позволяет строить интерактивные UI с использованием компонентного подхода.
Тем не менее, можно выделить несколько причин, по которым можно предпочесть React jQuery для современных веб-приложений:
1️⃣ Компонентный подход: Основан на компонентах, что позволяет создавать переиспользуемые, независимые части интерфейса. Это делает код более организованным и упрощает его поддержку.
2️⃣ Виртуальный DOM: Использует виртуальный DOM, что позволяет оптимизировать обновление интерфейса и повысить производительность приложения, минимизируя количество манипуляций с реальным DOM.
3️⃣ Однонаправленный поток данных: Реализует паттерн однонаправленного потока данных, который облегчает понимание того, как данные передаются через приложение и как состояние компонента влияет на его отображение.
4️⃣ Широкие возможности для разработки сложных приложений: Лучше подходит для разработки больших и сложных веб-приложений, где требуется высокая степень интерактивности и динамичности интерфейса.
5️⃣ Экосистема и сообщество: Имеет огромное сообщество разработчиков и богатую экосистему, включая множество готовых решений, библиотек и инструментов, что облегчает разработку и внедрение новых функций.
6️⃣ Интеграция с современными архитектурами и инструментами разработки: Легко интегрируется с современными архитектурами веб-разработки, такими как Redux для управления состоянием приложения, и с инструментами разработки, такими как Webpack, Babel и другие.
7️⃣ Поддержка из коробки: Создание интерактивных пользовательских интерфейсов с ним часто требует меньше кода и меньше усилий для поддержания его в актуальном состоянии по сравнению с использованием jQuery для тех же целей.
Хотя React предлагает множество преимуществ для разработки современных веб-приложений, выбор между React и jQuery зависит от конкретных требований проекта. Для простых веб-сайтов или задач, где необходимо быстро добавить интерактивность без переписывания существующего кода, jQuery может быть более подходящим выбором. Для создания сложных пользовательских интерфейсов с высокой степенью взаимодействия React предлагает более современный и мощный инструментарий.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21😁3🔥1👀1
Зачем используют vuex ?
Спросят с вероятностью 10%
Vuex — это библиотека управления состоянием для приложений, предназначенная для централизованного хранения всех данных, используемых в приложении. В больших и сложных приложениях, где множество компонентов нуждаются в доступе к общим данным и должны реагировать на их изменения в реальном времени, простого пропс-дренажа (props drilling) и событийного взаимодействия недостаточно для эффективного управления состоянием. Вот основные причины использования Vuex в таких случаях:
1️⃣ Централизованное управление состоянием
Предоставляет единое глобальное хранилище для всех компонентов приложения, что облегчает отслеживание и управление состоянием приложения, делая данные доступными для всех компонентов независимо от их места в иерархии.
2️⃣ Реактивность
Состояние, хранящееся в нем, реактивно. Это означает, что он автоматически отслеживает его изменения и обновляет представление, когда состояние изменяется. Это делает разработку интерактивных интерфейсов более интуитивно понятной и менее подверженной ошибкам.
3️⃣ Удобство отладки и разработки
Поддерживает инструменты, позволяя отслеживать, как и когда изменяется состояние приложения. Это значительно упрощает отладку и позволяет лучше понять поток данных в приложении.
4️⃣ Поддержка масштабируемости
Приложения, разработанные с его использованием, легче масштабировать благодаря структурированной и предсказуемой организации кода. Разделение логики управления состоянием на действия, мутации и геттеры делает код более организованным и понятным.
5️⃣ Упрощение управления сложными взаимодействиями
Упрощает управление сложными взаимодействиями и потоками данных между компонентами, например, при выполнении асинхронных операций, таких как запросы к серверу, и последующем обновлении состояния в зависимости от ответа.
Пример:
Этот простой пример демонстрирует, как Vuex может быть использован для централизованного управления состоянием и его изменениями.
Использование Vuex целесообразно в сложных приложениях, где требуется эффективное управление и обмен данными между компонентами. Оно обеспечивает реактивность, удобство отладки, масштабируемость и структурированность, делая управление состоянием приложения более организованным и удобным.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 10%
Vuex — это библиотека управления состоянием для приложений, предназначенная для централизованного хранения всех данных, используемых в приложении. В больших и сложных приложениях, где множество компонентов нуждаются в доступе к общим данным и должны реагировать на их изменения в реальном времени, простого пропс-дренажа (props drilling) и событийного взаимодействия недостаточно для эффективного управления состоянием. Вот основные причины использования Vuex в таких случаях:
1️⃣ Централизованное управление состоянием
Предоставляет единое глобальное хранилище для всех компонентов приложения, что облегчает отслеживание и управление состоянием приложения, делая данные доступными для всех компонентов независимо от их места в иерархии.
2️⃣ Реактивность
Состояние, хранящееся в нем, реактивно. Это означает, что он автоматически отслеживает его изменения и обновляет представление, когда состояние изменяется. Это делает разработку интерактивных интерфейсов более интуитивно понятной и менее подверженной ошибкам.
3️⃣ Удобство отладки и разработки
Поддерживает инструменты, позволяя отслеживать, как и когда изменяется состояние приложения. Это значительно упрощает отладку и позволяет лучше понять поток данных в приложении.
4️⃣ Поддержка масштабируемости
Приложения, разработанные с его использованием, легче масштабировать благодаря структурированной и предсказуемой организации кода. Разделение логики управления состоянием на действия, мутации и геттеры делает код более организованным и понятным.
5️⃣ Упрощение управления сложными взаимодействиями
Упрощает управление сложными взаимодействиями и потоками данных между компонентами, например, при выполнении асинхронных операций, таких как запросы к серверу, и последующем обновлении состояния в зависимости от ответа.
Пример:
// Создание хранилища Vuex
const store = new Vuex.Store({
state: {
count: 0
},
mutations: {
increment(state) {
state.count++;
}
}
});
// Использование хранилища в компоненте Vue
new Vue({
el: '#app',
computed: {
count() {
return store.state.count;
}
},
methods: {
increment() {
store.commit('increment');
}
}
});
Этот простой пример демонстрирует, как Vuex может быть использован для централизованного управления состоянием и его изменениями.
Использование Vuex целесообразно в сложных приложениях, где требуется эффективное управление и обмен данными между компонентами. Оно обеспечивает реактивность, удобство отладки, масштабируемость и структурированность, делая управление состоянием приложения более организованным и удобным.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤2🔥2
Что такое async и await ?
Спросят с вероятностью 10%
async/await — это синтаксический сахар для работы с асинхронными операциями, делающий код, работающий с асинхронными действиями, такими как запросы к серверу или чтение файлов, более читаемым и легким для понимания. Этот синтаксис был введен в ES2017 (ES8) и строится на промисах (Promises).
- Ключевое слово
Используется перед объявлением функции. Это позволяет функции автоматически возвращать промис. Если эта функция возвращает не промис, то возвращаемое значение будет автоматически обернуто в промис.
- Ключевое слово
Используется для ожидания результата промиса внутри асинхронной функции
В этом примере функция
Преимущества использования:
✅ Улучшение читаемости кода: Асинхронный код, написанный с использованием
✅ Упрощение обработки ошибок: В асинхронных функциях с
✅ Избегание "callback hell": Использование
Важно помнить:
-
-
- Внутри асинхронных функций
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 10%
async/await — это синтаксический сахар для работы с асинхронными операциями, делающий код, работающий с асинхронными действиями, такими как запросы к серверу или чтение файлов, более читаемым и легким для понимания. Этот синтаксис был введен в ES2017 (ES8) и строится на промисах (Promises).
- Ключевое слово
async
Используется перед объявлением функции. Это позволяет функции автоматически возвращать промис. Если эта функция возвращает не промис, то возвращаемое значение будет автоматически обернуто в промис.
async function fetchData() {
return 'данные';
}
fetchData().then(data => console.log(data)); // выводит "данные"
- Ключевое слово
await
Используется для ожидания результата промиса внутри асинхронной функции
async
. Оно приостанавливает выполнение асинхронной функции до тех пор, пока промис не выполнится (т.е. не будет разрешен или отклонен). ЕЕ можно использовать только внутри асинхронных функций.async function fetchData() {
let data = await fetch('https://api.example.com/data');
let json = await data.json();
return json;
}
В этом примере функция
fetchData
сначала ожидает завершения HTTP-запроса к серверу, а затем ожидает завершения преобразования ответа в формат JSON. Весь этот процесс асинхронный, но благодаря await
код выглядит как синхронный.Преимущества использования:
✅ Улучшение читаемости кода: Асинхронный код, написанный с использованием
async
/await
, выглядит более структурированным и похожим на синхронный код, что упрощает его понимание.✅ Упрощение обработки ошибок: В асинхронных функциях с
await
можно использовать стандартный синтаксис try
/catch
для обработки ошибок, что делает код единообразнее.✅ Избегание "callback hell": Использование
async
/await
позволяет избежать сложностей с вложенными коллбэками, которые могут возникнуть при использовании промисов или старого стиля асинхронного кода с коллбэками.Важно помнить:
-
await
приостанавливает выполнение только текущей асинхронной функции, не блокируя выполнение другого кода.-
await
может использоваться только внутри функций, объявленных с async
.- Внутри асинхронных функций
async
можно использовать множество операторов await
для последовательного выполнения зависимых друг от друга асинхронных операций.async
/await
сделал написание асинхронного кода более интуитивно понятным и удобным, существенно улучшив разработку асинхронных приложений.➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍38❤4🔥4
В чем различие методов call apply bind ?
Спросят с вероятностью 20%
Методы call, apply и bind принадлежат к функциональному объекту
call
Вызывает функцию, явно устанавливая
Пример:
apply
Очень похож на
bind
Создаёт новую функцию, которая, когда она вызывается, имеет установленный контекст
Здесь он используется для создания новой функции
-
-
-
Эти методы позволяют более гибко управлять контекстом выполнения функций, что является мощным инструментом, особенно при работе с объектно-ориентированным кодом и асинхронными вызовами.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 20%
Методы call, apply и bind принадлежат к функциональному объекту
Function
и используются для указания контекста this
при вызове функции. Хотя все три метода позволяют контролировать значение this
внутри функции, между ними существуют ключевые различия в способе использования и поведении.call
Вызывает функцию, явно устанавливая
this
в первом аргументе. Остальные аргументы передаются в вызываемую функцию как есть.Пример:
function greet(message, name) {Здесь он используется для вызова функции
console.log(${message}, ${name}. This is ${this});
}
greet.call("Earth", "Hello", "Alice"); // "Hello, Alice. This is Earth"
greet
с this
, установленным в "Earth"
, и двумя дополнительными аргументами "Hello"
и "Alice"
.apply
Очень похож на
call
, но принимает аргументы в виде массива, а не по отдельности.function greet(message, name) {В этом случае он вызывает функцию
console.log(
${message}, ${name}. This is ${this}
);
}
greet.apply("Earth", ["Hello", "Alice"]); // "Hello, Alice. This is Earth"
greet
с this
, установленным в "Earth"
, и аргументами, переданными в виде массива.bind
Создаёт новую функцию, которая, когда она вызывается, имеет установленный контекст
this
, указанный в первом аргументе. В отличие от call
и apply
, bind
не вызывает функцию сразу, а возвращает новую функцию, которую можно вызвать позже.function greet(message, name) {
console.log(
${message}, ${name}. This is ${this}
);
}
const greetEarth = greet.bind("Earth", "Hello", "Alice");
greetEarth(); // "Hello, Alice. This is Earth"
Здесь он используется для создания новой функции
greetEarth
, которая при вызове выводит тот же результат, что и предыдущие примеры, но с тем отличием, что контекст this
и аргументы были заранее заданы.-
call
вызывает функцию с указанным контекстом this
и отдельными аргументами.-
apply
аналогичен call
, но принимает аргументы в виде массива.-
bind
создаёт новую функцию с предустановленным контекстом this
и аргументами, если они были предоставлены, но не вызывает её немедленно.Эти методы позволяют более гибко управлять контекстом выполнения функций, что является мощным инструментом, особенно при работе с объектно-ориентированным кодом и асинхронными вызовами.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
❤31👍12🔥9
Для чего нужно замыкание ?
Спросят с вероятностью 10%
Замыкание — это мощная концепция, которая позволяет функции запоминать и доступ к переменным из своей области видимости в момент создания, даже после того как исполнение функции, создавшей эти переменные, было завершено. Это одно из ключевых понятий, обеспечивающее множество возможностей для эффективной работы с данными и создания функций.
Для чего нужны замыкания:
1️⃣ Инкапсуляция данных: Позволяют скрыть переменные внутри функции, делая их недоступными снаружи, кроме как через определённые предоставленные функции. Это форма инкапсуляции данных, которая помогает избежать загрязнения глобальной области видимости и случайного изменения данных.
2️⃣ Создание приватных переменных: До введения классов с модификаторами доступа (private поля в классах, предложенные в ES2020) замыкания были основным способом создания приватных переменных для объектов и функций.
3️⃣ Фабрики функций: Позволяют создавать функции, которые могут генерировать другие функции, уже с предустановленными параметрами или конфигурациями. Это полезно для настройки поведения функций в зависимости от контекста.
4️⃣ Модульность и управление состоянием: Обеспечивают механизм для создания модулей и библиотек, позволяя определить приватные переменные и функции, которые недоступны извне, и предоставить публичное API через возвращаемые функции.
5️⃣ Кадрирование и частичное применение функций: Используются для реализации каррирования и частичного применения функций, когда функция принимает несколько аргументов, один или несколько из которых уже предустановлены.
Пример:
В этом примере
Замыкания предоставляют мощный инструмент для инкапсуляции данных, создания приватных переменных, управления состоянием и реализации различных программных паттернов, что делает их неотъемлемой частью разработки.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 10%
Замыкание — это мощная концепция, которая позволяет функции запоминать и доступ к переменным из своей области видимости в момент создания, даже после того как исполнение функции, создавшей эти переменные, было завершено. Это одно из ключевых понятий, обеспечивающее множество возможностей для эффективной работы с данными и создания функций.
Для чего нужны замыкания:
1️⃣ Инкапсуляция данных: Позволяют скрыть переменные внутри функции, делая их недоступными снаружи, кроме как через определённые предоставленные функции. Это форма инкапсуляции данных, которая помогает избежать загрязнения глобальной области видимости и случайного изменения данных.
2️⃣ Создание приватных переменных: До введения классов с модификаторами доступа (private поля в классах, предложенные в ES2020) замыкания были основным способом создания приватных переменных для объектов и функций.
3️⃣ Фабрики функций: Позволяют создавать функции, которые могут генерировать другие функции, уже с предустановленными параметрами или конфигурациями. Это полезно для настройки поведения функций в зависимости от контекста.
4️⃣ Модульность и управление состоянием: Обеспечивают механизм для создания модулей и библиотек, позволяя определить приватные переменные и функции, которые недоступны извне, и предоставить публичное API через возвращаемые функции.
5️⃣ Кадрирование и частичное применение функций: Используются для реализации каррирования и частичного применения функций, когда функция принимает несколько аргументов, один или несколько из которых уже предустановлены.
Пример:
function createCounter() {
let count = 0; // Приватная переменная, доступная только внутри createCounter
return function() {
count += 1;
return count;
};
}
const counter = createCounter(); // counter — это функция, замыкающая в себе переменную count
console.log(counter()); // 1
console.log(counter()); // 2
// Переменная count остается доступной для counter(), но недоступна напрямую извне
В этом примере
createCounter
создает и возвращает функцию, которая увеличивает и возвращает переменную count
при каждом вызове. Переменная count
инкапсулирована внутри замыкания и не доступна для прямого доступа или изменения извне, что демонстрирует как инкапсуляцию, так и управление состоянием через замыкание.Замыкания предоставляют мощный инструмент для инкапсуляции данных, создания приватных переменных, управления состоянием и реализации различных программных паттернов, что делает их неотъемлемой частью разработки.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
❤29👍13🔥3🤯2😁1
Что такое контекст ?
Спросят с вероятностью 10%
Контекст выполнения (Execution Context) относится к окружению, в котором выполняется текущий код. Он содержит информацию о том, где и как выполняется код, включая значения переменных и
this
Ключевое слово ссылается на объект, в контексте которого выполняется текущий код. Значение его зависит от того, как вызывается функция:
1️⃣ В глобальном контексте выполнения (вне любых функций), он ссылается на глобальный объект. В браузере глобальным объектом является
2️⃣ Внутри функции, вызванной как обычная функция (например,
3️⃣ В методе объекта Он ссылается на объект, к которому принадлежит метод.
4️⃣ В конструкторе (функции, вызванной с ключевым словом
5️⃣ Через методы
Примеры:
Зачем нужен контекст
Позволяет функциям иметь доступ к текущему объекту и взаимодействовать с его свойствами и методами, делая код более гибким и повторно используемым. Например, одна и та же функция может работать с данными разных объектов, в зависимости от того, в контексте какого объекта она была вызвана.
Понимание работы контекста this является ключевым для глубокого понимания языка и эффективной разработки, особенно при работе с объектно-ориентированным кодом и функциями обратного вызова.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 10%
Контекст выполнения (Execution Context) относится к окружению, в котором выполняется текущий код. Он содержит информацию о том, где и как выполняется код, включая значения переменных и
this
. Однако, когда говорят о нем в более узком смысле, чаще всего имеют в виду контекст this
.this
Ключевое слово ссылается на объект, в контексте которого выполняется текущий код. Значение его зависит от того, как вызывается функция:
1️⃣ В глобальном контексте выполнения (вне любых функций), он ссылается на глобальный объект. В браузере глобальным объектом является
window
.2️⃣ Внутри функции, вызванной как обычная функция (например,
myFunction()
), он ссылается на глобальный объект в нестрогом режиме и на undefined
в строгом режиме ('use strict';
).3️⃣ В методе объекта Он ссылается на объект, к которому принадлежит метод.
4️⃣ В конструкторе (функции, вызванной с ключевым словом
new
), он ссылается на вновь созданный объект.5️⃣ Через методы
call
,apply
и bind
можно явно задать данное значение для вызова функции.Примеры:
function show() {
console.log(this);
}
const obj = {
show: function() {
console.log(this);
}
};
show(); // В глобальном контексте, this будет глобальным объектом или undefined в строгом режиме
obj.show(); // В контексте объекта, this будет ссылаться на obj
function Person(name) {
this.name = name;
}
const person = new Person('Alice'); // Здесь this внутри Person будет ссылаться на новый объект person
const externalShow = show.bind(obj);
externalShow(); // this будет ссылаться на obj благодаря bind
Зачем нужен контекст
this
Позволяет функциям иметь доступ к текущему объекту и взаимодействовать с его свойствами и методами, делая код более гибким и повторно используемым. Например, одна и та же функция может работать с данными разных объектов, в зависимости от того, в контексте какого объекта она была вызвана.
Понимание работы контекста this является ключевым для глубокого понимания языка и эффективной разработки, особенно при работе с объектно-ориентированным кодом и функциями обратного вызова.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍39❤5
Что известно о различии между function expression и function declaration ?
Спросят с вероятностью 20%
Существует два основных способа объявления функций: Function Declaration (Объявление Функции) и Function Expression (Функциональное Выражение). Хотя оба подхода определяют функции, между ними есть несколько ключевых различий, влияющих на поведение и использование функций в коде.
Function Declaration (Объявление Функции)
Способ объявления функции, при котором используется ключевое слово
- Поднятие (Hoisting): Поднимаются вверх их области видимости перед выполнением кода, что позволяет вызывать функции до их объявления в коде.
- Область видимости: Определяется её местом в коде: в глобальной области видимости, в области видимости другой функции или в блочной области видимости (в строгом режиме).
- Мутабельность: Имя функции является неизменным и не может быть переназначено.
Function Expression (Функциональное Выражение)
Способ объявления функции, при котором функция создаётся в рамках выражения. Функциональные выражения могут быть анонимными или именованными.
Особенности:
- Поднятие (Hoisting): Переменные, объявленные через
- Анонимные и именованные функции: Функциональные выражения могут быть анонимными (не иметь имени) или именованными. Именованные функциональные выражения могут быть полезны для улучшения читаемости кода и при отладке.
- Использование в выражениях: Функциональные выражения могут использоваться в любых местах, где допустимы выражения, например, в качестве аргументов для других функций.
Основное различие между Function Declaration и Function Expression заключается в том, что объявления функций поднимаются и доступны в своей области видимости до выполнения кода, в то время как функциональные выражения доступны только после своего объявления в коде. Выбор между этими двумя способами объявления функций зависит от конкретной задачи, стиля программирования и предпочтений разработчика. Function Expression предоставляет большую гибкость, особенно когда необходимо использовать анонимные функции или присваивать функции переменным.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 20%
Существует два основных способа объявления функций: Function Declaration (Объявление Функции) и Function Expression (Функциональное Выражение). Хотя оба подхода определяют функции, между ними есть несколько ключевых различий, влияющих на поведение и использование функций в коде.
Function Declaration (Объявление Функции)
Способ объявления функции, при котором используется ключевое слово
function
, за которым следует имя функции.function sum(a, b) {
return a + b;
}
Особенности:
- Поднятие (Hoisting): Поднимаются вверх их области видимости перед выполнением кода, что позволяет вызывать функции до их объявления в коде.
- Область видимости: Определяется её местом в коде: в глобальной области видимости, в области видимости другой функции или в блочной области видимости (в строгом режиме).
- Мутабельность: Имя функции является неизменным и не может быть переназначено.
Function Expression (Функциональное Выражение)
Способ объявления функции, при котором функция создаётся в рамках выражения. Функциональные выражения могут быть анонимными или именованными.
const sum = function(a, b) {
return a + b;
};
Особенности:
- Поднятие (Hoisting): Переменные, объявленные через
var
, поднимаются, но инициализируются значением undefined
, поэтому функциональное выражение не будет доступно до его объявления в коде. Если функциональное выражение объявлено через let
или const
, то оно вообще не будет доступно до объявления из-за временной мертвой зоны.- Анонимные и именованные функции: Функциональные выражения могут быть анонимными (не иметь имени) или именованными. Именованные функциональные выражения могут быть полезны для улучшения читаемости кода и при отладке.
- Использование в выражениях: Функциональные выражения могут использоваться в любых местах, где допустимы выражения, например, в качестве аргументов для других функций.
Основное различие между Function Declaration и Function Expression заключается в том, что объявления функций поднимаются и доступны в своей области видимости до выполнения кода, в то время как функциональные выражения доступны только после своего объявления в коде. Выбор между этими двумя способами объявления функций зависит от конкретной задачи, стиля программирования и предпочтений разработчика. Function Expression предоставляет большую гибкость, особенно когда необходимо использовать анонимные функции или присваивать функции переменным.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26👍19❤4
Какими способами можно скрыть элемент ?
Спросят с вероятностью 10%
Скрыть элемент на веб-странице можно несколькими способами. Разные методы подходят для различных сценариев использования, например, когда нужно полностью удалить элемент из потока документа или просто сделать его невидимым для пользователя, но сохранить в потоке документа. Вот некоторые из наиболее часто используемых способов:
1️⃣ display: none
Самый прямолинейный способ. Это свойство полностью убирает элемент из потока документа, и он не занимает никакого пространства.
2️⃣ visibility: hidden
Элемент остаётся в потоке документа и продолжает занимать своё пространство, но становится невидимым. В отличие от
3️⃣ opacity: 0
Устанавливает уровень прозрачности элемента. Значение
4️⃣ Использование абсолютного позиционирования
Можно абсолютно позиционировать элемент за пределами видимой области экрана, сделав его таким образом невидимым для пользователя.
5️⃣ height: 0 и overflow: hidden
Если задать элементу высоту
6️⃣ clip или clip-path
С помощью этого можно обрезать элемент таким образом, что его содержимое станет невидимым. Это более сложный и менее распространённый способ, который может быть использован для специфических целей.
Выбор метода зависит от конкретной задачи:
✅ Если элемент не должен занимать место в макете и его не нужно восстанавливать с помощью JavaScript, подходит
✅ Если элемент должен сохранить своё место, но быть невидимым, используйте
✅ Для временного скрытия элемента с возможностью быстрого восстановления без изменения макета страницы можно использовать
Каждый метод имеет свои особенности и подходит для определённых ситуаций, поэтому выбор зависит от целей скрытия элемента и требований к взаимодействию с ним.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 10%
Скрыть элемент на веб-странице можно несколькими способами. Разные методы подходят для различных сценариев использования, например, когда нужно полностью удалить элемент из потока документа или просто сделать его невидимым для пользователя, но сохранить в потоке документа. Вот некоторые из наиболее часто используемых способов:
1️⃣ display: none
Самый прямолинейный способ. Это свойство полностью убирает элемент из потока документа, и он не занимает никакого пространства.
.element {
display: none;
}
2️⃣ visibility: hidden
Элемент остаётся в потоке документа и продолжает занимать своё пространство, но становится невидимым. В отличие от
display: none
, visibility: hidden
сохраняет место элемента в макете..element {
visibility: hidden;
}
3️⃣ opacity: 0
Устанавливает уровень прозрачности элемента. Значение
0
делает элемент полностью прозрачным, но, как и в случае с visibility: hidden
, элемент остаётся видимым для DOM и продолжает занимать место..element {
opacity: 0;
}
4️⃣ Использование абсолютного позиционирования
Можно абсолютно позиционировать элемент за пределами видимой области экрана, сделав его таким образом невидимым для пользователя.
.element {
position: absolute;
left: -9999px;
}
5️⃣ height: 0 и overflow: hidden
Если задать элементу высоту
0
и установить overflow: hidden
, содержимое элемента скроется, но сам элемент по-прежнему будет присутствовать в потоке документа, не занимая при этом видимого пространства..element {
height: 0;
overflow: hidden;
}
6️⃣ clip или clip-path
С помощью этого можно обрезать элемент таким образом, что его содержимое станет невидимым. Это более сложный и менее распространённый способ, который может быть использован для специфических целей.
.element {
position: absolute;
clip: rect(0 0 0 0);
}
Выбор метода зависит от конкретной задачи:
✅ Если элемент не должен занимать место в макете и его не нужно восстанавливать с помощью JavaScript, подходит
display: none
.✅ Если элемент должен сохранить своё место, но быть невидимым, используйте
visibility: hidden
или opacity: 0
.✅ Для временного скрытия элемента с возможностью быстрого восстановления без изменения макета страницы можно использовать
visibility: hidden
или opacity: 0
.Каждый метод имеет свои особенности и подходит для определённых ситуаций, поэтому выбор зависит от целей скрытия элемента и требований к взаимодействию с ним.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍46🔥4
Что такое cors ?
Спросят с вероятностью 10%
CORS (Cross-Origin Resource Sharing — «совместное использование ресурсов между разными источниками») — это механизм, который позволяет веб-страницам запрашивать ресурсы с другого домена, отличного от домена, с которого была загружена сама страница. По умолчанию, в целях безопасности, веб-браузеры ограничивают кросс-доменные запросы с использованием так называемой политики одного источника (Same-Origin Policy). Он предоставляет веб-серверам возможность явно разрешить некоторые кросс-доменные запросы, сохраняя при этом безопасность.
Как он работает
Когда веб-приложение пытается сделать запрос к ресурсу, который находится на другом домене (кросс-доменный запрос), браузер автоматически добавляет к запросу заголовок
Примеры:
✅
✅
✅
Почему CORS важен
Решает важную проблему безопасности, позволяя контролировать, какие веб-сайты могут использовать ресурсы вашего веб-сайта. Это предотвращает множество видов атак, таких как CSRF (Cross-Site Request Forgery — подделка межсайтовых запросов), позволяя при этом легитимным сайтам запрашивать данные через браузер.
Проблемы с CORS
Хотя он повышает безопасность, неправильная настройка CORS может привести к уязвимостям. Например, слишком широкое использование
CORS является ключевым элементом современной веб-разработки, позволяя безопасно реализовывать кросс-доменные запросы и взаимодействия между веб-приложениями. Правильное понимание и настройка CORS необходимы для обеспечения безопасности и гибкости веб-приложений.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 10%
CORS (Cross-Origin Resource Sharing — «совместное использование ресурсов между разными источниками») — это механизм, который позволяет веб-страницам запрашивать ресурсы с другого домена, отличного от домена, с которого была загружена сама страница. По умолчанию, в целях безопасности, веб-браузеры ограничивают кросс-доменные запросы с использованием так называемой политики одного источника (Same-Origin Policy). Он предоставляет веб-серверам возможность явно разрешить некоторые кросс-доменные запросы, сохраняя при этом безопасность.
Как он работает
Когда веб-приложение пытается сделать запрос к ресурсу, который находится на другом домене (кросс-доменный запрос), браузер автоматически добавляет к запросу заголовок
Origin
. Этот заголовок содержит домен, с которого был сделан запрос. Веб-сервер, к которому направлен запрос, затем проверяет этот заголовок и решает, разрешить ли запрос. Если сервер разрешает запросы из этого источника, он отвечает с соответствующими CORS заголовками, указывающими, какие действия разрешены. Один из таких заголовков — Access-Control-Allow-Origin
, который может быть установлен в (что означает разрешение для всех доменов) или в конкретный домен.Примеры:
✅
Access-Control-Allow-Origin
: Указывает, какие домены могут получать доступ к ресурсу. Может быть установлен в конкретный домен или для разрешения всех доменов.✅
Access-Control-Allow-Methods
: Указывает, какие HTTP методы разрешены при доступе к ресурсу.✅
Access-Control-Allow-Headers
: Указывает, какие HTTP заголовки могут быть использованы во время запроса.Почему CORS важен
Решает важную проблему безопасности, позволяя контролировать, какие веб-сайты могут использовать ресурсы вашего веб-сайта. Это предотвращает множество видов атак, таких как CSRF (Cross-Site Request Forgery — подделка межсайтовых запросов), позволяя при этом легитимным сайтам запрашивать данные через браузер.
Проблемы с CORS
Хотя он повышает безопасность, неправильная настройка CORS может привести к уязвимостям. Например, слишком широкое использование
Access-Control-Allow-Origin: *
может случайно разрешить небезопасные кросс-доменные запросы. Разработчики должны тщательно настраивать политики CORS, чтобы избежать потенциальных проблем с безопасностью.CORS является ключевым элементом современной веб-разработки, позволяя безопасно реализовывать кросс-доменные запросы и взаимодействия между веб-приложениями. Правильное понимание и настройка CORS необходимы для обеспечения безопасности и гибкости веб-приложений.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25🔥9❤3
В чём разница между классической функцией и стрелочной ?
Спросят с вероятностью 20%
Классические функции (объявленные через ключевое слово
1️⃣ Синтаксис
Классическая функция:
2️⃣ Контекст this
В классических функциях контекст определяется тем, как функция была вызвана. В стрелочных функциях контекст наследуется из окружающего контекста (лексический контекст this), где функция была объявлена.
Пример с классической функцией:
3️⃣ Конструктор
Классические функции могут использоваться с помощью ключевого слова
Пример с классической функцией:
Попытка использовать стрелочную функцию как конструктор:
4️⃣ Аргументы
В классических функциях можно использовать объект
Основные различия между классическими и стрелочными функциями заключаются в синтаксисе, поведении
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 20%
Классические функции (объявленные через ключевое слово
function
) и стрелочные функции (введённые в ES6 через =>
синтаксис) являются двумя способами объявления функций, но между ними есть несколько важных различий:1️⃣ Синтаксис
Классическая функция:
function add(a, b) {Стрелочная функция:
return a + b;
}
const add = (a, b) => a + b;Предлагают более краткий синтаксис для написания функций, особенно если функция состоит из одного выражения.
2️⃣ Контекст this
В классических функциях контекст определяется тем, как функция была вызвана. В стрелочных функциях контекст наследуется из окружающего контекста (лексический контекст this), где функция была объявлена.
Пример с классической функцией:
const obj = {Пример со стрелочной функцией:
id: 42,
counter: function() {
setTimeout(function() {
console.log(this.id); // this ссылается на глобальный объект или undefined в строгом режиме, а не на obj
}, 1000);
}
};
const obj = {
id: 42,
counter: function() {
setTimeout(() => {
console.log(this.id); // this корректно ссылается на obj, так как стрелочная функция наследует this из окружения
}, 1000);
}
};
3️⃣ Конструктор
Классические функции могут использоваться с помощью ключевого слова
new
. Стрелочные функции не могут быть использованы как конструкторы, и попытка это сделать приведет к ошибке.Пример с классической функцией:
function Person(name) {
this.name = name;
}
const person = new Person("Alice");
Попытка использовать стрелочную функцию как конструктор:
const Person = (name) => {
this.name = name;
};
// const person = new Person("Alice"); // Ошибка: Person не является конструктором
4️⃣ Аргументы
В классических функциях можно использовать объект
arguments
, который содержит аргументы, переданные функции. В стрелочных функциях нет объекта arguments
, но можно использовать оператор расширения ...
для достижения аналогичного результата.Основные различия между классическими и стрелочными функциями заключаются в синтаксисе, поведении
this
, использовании в качестве конструктора и доступе к аргументам функции. Стрелочные функции предлагают более краткий синтаксис и удобны для написания коротких функций, а также при работе с контекстом this
в обратных вызовах и замыканиях. Однако для более сложных сценариев, требующих использования this
в различных контекстах или создания конструкторов, предпочтительнее использовать классические функции.➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍34❤8🔥4
Зачем нужен менеджер состояния ?
Спросят с вероятностью 10%
Менеджер состояния используется для централизованного управления состоянием приложения, особенно когда речь идет о сложных или крупномасштабных приложениях с множеством компонентов, которым необходимо обмениваться данными. Состояние приложения может включать различные данные: от пользовательского ввода и серверных ответов до временных данных, таких как статус загрузки или авторизационный статус пользователя.
Зачем нужен менеджер состояния:
1️⃣ Централизация состояния: Позволяют хранить все данные приложения в одном месте, делая их легкодоступными для всех компонентов приложения независимо от их места в иерархии.
2️⃣ Упрощение обмена данными между компонентами: В больших приложениях компоненты часто нуждаются в доступе к одним и тем же данным. Облегчает передачу данных между компонентами, уменьшая необходимость в пропсах или колбэках.
3️⃣ Поддержка сложных взаимодействий и асинхронности: Предоставляют механизмы для управления асинхронными действиями, такими как запросы к API, и могут обрабатывать сложные последовательности действий, обновляя состояние соответствующим образом.
4️⃣ Отладка и разработка: Большинство предлагают инструменты для отладки, которые позволяют просматривать изменения состояния в реальном времени, отслеживать действия, вызывающие эти изменения, и даже перемещаться по истории изменений состояния.
5️⃣ Повышение производительности: Централизованное управление состоянием позволяет оптимизировать обновления интерфейса, минимизируя ненужные рендеринги и улучшая общую производительность приложения.
6️⃣ Повышение масштабируемости приложения: Предоставляет структурированный подход к управлению состоянием, который облегчает масштабирование приложения и добавление новых функций.
Примеры:
- Redux: Один из самых популярных менеджеров состояния для React, использующий концепцию однонаправленного потока данных.
- Vuex: Специализированный менеджер состояния для Vue.js.
- MobX: Альтернатива Redux, предлагающая более гибкий подход к управлению состоянием через наблюдаемые объекты.
- Context API и useReducer (React Hook): Встроенные механизмы в React для управления состоянием без добавления внешних библиотек.
В зависимости от сложности приложения и предпочтений можно выбирать между использованием внешних библиотек для управления состоянием или применением встроенных средств фреймворка.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 10%
Менеджер состояния используется для централизованного управления состоянием приложения, особенно когда речь идет о сложных или крупномасштабных приложениях с множеством компонентов, которым необходимо обмениваться данными. Состояние приложения может включать различные данные: от пользовательского ввода и серверных ответов до временных данных, таких как статус загрузки или авторизационный статус пользователя.
Зачем нужен менеджер состояния:
1️⃣ Централизация состояния: Позволяют хранить все данные приложения в одном месте, делая их легкодоступными для всех компонентов приложения независимо от их места в иерархии.
2️⃣ Упрощение обмена данными между компонентами: В больших приложениях компоненты часто нуждаются в доступе к одним и тем же данным. Облегчает передачу данных между компонентами, уменьшая необходимость в пропсах или колбэках.
3️⃣ Поддержка сложных взаимодействий и асинхронности: Предоставляют механизмы для управления асинхронными действиями, такими как запросы к API, и могут обрабатывать сложные последовательности действий, обновляя состояние соответствующим образом.
4️⃣ Отладка и разработка: Большинство предлагают инструменты для отладки, которые позволяют просматривать изменения состояния в реальном времени, отслеживать действия, вызывающие эти изменения, и даже перемещаться по истории изменений состояния.
5️⃣ Повышение производительности: Централизованное управление состоянием позволяет оптимизировать обновления интерфейса, минимизируя ненужные рендеринги и улучшая общую производительность приложения.
6️⃣ Повышение масштабируемости приложения: Предоставляет структурированный подход к управлению состоянием, который облегчает масштабирование приложения и добавление новых функций.
Примеры:
- Redux: Один из самых популярных менеджеров состояния для React, использующий концепцию однонаправленного потока данных.
- Vuex: Специализированный менеджер состояния для Vue.js.
- MobX: Альтернатива Redux, предлагающая более гибкий подход к управлению состоянием через наблюдаемые объекты.
- Context API и useReducer (React Hook): Встроенные механизмы в React для управления состоянием без добавления внешних библиотек.
В зависимости от сложности приложения и предпочтений можно выбирать между использованием внешних библиотек для управления состоянием или применением встроенных средств фреймворка.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17👍6🔥2🤯1
Какие есть типы переменных ?
Спросят с вероятностью 10%
Существуют различные типы данных, которые могут быть присвоены переменным. В зависимости от контекста, под "типами переменных" могут подразумеваться как типы данных, так и способы объявления переменных. Ниже рассмотрим оба аспекта.
1️⃣ Примитивные типы:
-
-
-
-
-
-
-
2️⃣ Ссылочные типы (объекты):
- Объекты (
- Массивы (
- Функции (
Способы объявления переменных
-
-
-
Выбор типа переменной и типа данных зависит от задачи, которую вы решаете. Использование
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 10%
Существуют различные типы данных, которые могут быть присвоены переменным. В зависимости от контекста, под "типами переменных" могут подразумеваться как типы данных, так и способы объявления переменных. Ниже рассмотрим оба аспекта.
1️⃣ Примитивные типы:
-
Number
: представляет числа (целые или с плавающей точкой), включая специальные числовые значения Infinity
, -Infinity
и NaN
(Not-a-Number).-
String
: представляет строки текста.-
Boolean
: имеет два значения true
и false
.-
null
: указывает на отсутствие какого-либо значения.-
undefined
: указывает, что значение переменной не было установлено.-
Symbol
: представляет уникальные идентификаторы, введен в ECMAScript 2015.-
BigInt
: представляет целые числа произвольной точности.2️⃣ Ссылочные типы (объекты):
- Объекты (
Object
): коллекция ключ/значение, включая встроенные объекты, такие как Function
, Array
, Date
, RegExp
и другие.- Массивы (
Array
): упорядоченная коллекция значений.- Функции (
Function
): блоки кода, предназначенные для многократного выполнения.Способы объявления переменных
-
var
: Исторический способ объявления переменных. Обладает функциональной областью видимости и поднимается в начало области видимости (hoisting).-
let
: Введен в ES6 (ECMAScript 2015), позволяет объявлять переменные с блочной областью видимости, что делает их доступными только в рамках блока {}
.-
const
: Также введен в ES6, позволяет объявлять константы, т.е. переменные, значение которых не может быть изменено после инициализации. Имеет блочную область видимости.Выбор типа переменной и типа данных зависит от задачи, которую вы решаете. Использование
let
и const
предпочтительнее из-за более предсказуемой области видимости и лучшей поддержки модульности кода. Различие между типами данных помогает эффективно управлять информацией в программе, обеспечивая её гибкость и выразительность.➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍4❤3🤔1
Что такое макро и микро задачи ?
Спросят с вероятностью 20%
Макро- и микро-задачи являются частью механизма асинхронного программирования и внутренней модели выполнения, которые помогают управлять порядком выполнения асинхронных операций. Эти понятия связаны с циклом событий (event loop) и очередью задач. Давайте разберемся, что они собой представляют и как работают.
1️⃣ Микро-задачи (Microtasks)
Это задачи, которые запланированы для выполнения сразу после текущего выполненного скрипта, но до того, как event loop продолжит обрабатывать следующую макро-задачу. Примеры:
- Обещания (Promises):
-
2️⃣ Макро-задачи (Macrotasks)
Это задачи, которые обрабатываются event loop, каждая макро-задача извлекается из очереди и выполняется до конца, прежде чем event loop перейдет к следующей макро-задаче. Примеры:
-
-
-
- I/O операции
- Интерактивные действия, такие как клики мыши и нажатия клавиш
✅ Различия и порядок выполнения
Основное различие между макро- и микро-задачами заключается в их приоритете выполнения:
- После каждой макро-задачи, перед тем как переходить к следующей макро-задаче, event loop обрабатывает все микро-задачи в очереди микро-задач. Это означает, что микро-задачи выполняются чаще и имеют более высокий приоритет по сравнению с макро-задачами.
- Если во время выполнения микро-задач добавляются новые микро-задачи, они также будут выполнены в текущем цикле, перед переходом к следующей макро-задаче. Это может привести к "голоданию" макро-задач, если микро-задачи постоянно добавляются.
Пример:
В этом примере порядок вывода будет следующим:
1️⃣ Микро-задача 1
2️⃣ Микро-задача 2
3️⃣ Макро-задача 1
4️⃣ Макро-задача 2
Это демонстрирует, как микро-задачи имеют приоритет и выполняются до того, как event loop переходит к следующей макро-задаче.
Понимание различий между макро- и микро-задачами важно для эффективной работы с асинхронным кодом, поскольку это влияет на порядок выполнения операций и может быть источником трудноуловимых ошибок или неожиданного поведения программы.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 20%
Макро- и микро-задачи являются частью механизма асинхронного программирования и внутренней модели выполнения, которые помогают управлять порядком выполнения асинхронных операций. Эти понятия связаны с циклом событий (event loop) и очередью задач. Давайте разберемся, что они собой представляют и как работают.
1️⃣ Микро-задачи (Microtasks)
Это задачи, которые запланированы для выполнения сразу после текущего выполненного скрипта, но до того, как event loop продолжит обрабатывать следующую макро-задачу. Примеры:
- Обещания (Promises):
then
, catch
, finally
-
queueMicrotask()
2️⃣ Макро-задачи (Macrotasks)
Это задачи, которые обрабатываются event loop, каждая макро-задача извлекается из очереди и выполняется до конца, прежде чем event loop перейдет к следующей макро-задаче. Примеры:
-
setTimeout
-
setInterval
-
setImmediate
(Node.js)- I/O операции
- Интерактивные действия, такие как клики мыши и нажатия клавиш
✅ Различия и порядок выполнения
Основное различие между макро- и микро-задачами заключается в их приоритете выполнения:
- После каждой макро-задачи, перед тем как переходить к следующей макро-задаче, event loop обрабатывает все микро-задачи в очереди микро-задач. Это означает, что микро-задачи выполняются чаще и имеют более высокий приоритет по сравнению с макро-задачами.
- Если во время выполнения микро-задач добавляются новые микро-задачи, они также будут выполнены в текущем цикле, перед переходом к следующей макро-задаче. Это может привести к "голоданию" макро-задач, если микро-задачи постоянно добавляются.
Пример:
setTimeout(() => console.log('Макро-задача 1'), 0);
Promise.resolve().then(() => console.log('Микро-задача 1'));
setTimeout(() => console.log('Макро-задача 2'), 0);
Promise.resolve().then(() => console.log('Микро-задача 2'));
В этом примере порядок вывода будет следующим:
1️⃣ Микро-задача 1
2️⃣ Микро-задача 2
3️⃣ Макро-задача 1
4️⃣ Макро-задача 2
Это демонстрирует, как микро-задачи имеют приоритет и выполняются до того, как event loop переходит к следующей макро-задаче.
Понимание различий между макро- и микро-задачами важно для эффективной работы с асинхронным кодом, поскольку это влияет на порядок выполнения операций и может быть источником трудноуловимых ошибок или неожиданного поведения программы.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍37❤6
Чем let отличается от var ?
Спросят с вероятностью 27%
Ключевые слова let и var используются для объявления переменных, но между ними есть несколько важных различий, касающихся области видимости, поднятия (hoisting) и создания блока.
Область видимости (Scope)
- var: Объявления переменных с использованием
- let: В отличие от
Поднятие (Hoisting)
- var: Переменные, объявленные с ее помощью, поднимаются в начало функции или скрипта. Это означает, что они могут быть использованы до своего объявления, хотя до инициализации они будут иметь значение
- let: Переменные, объявленные с ее помощью, также поднимаются, но не инициализируются. Попытка доступа к такой переменной до её объявления приведет к ошибке
Создание в глобальном контексте
- var: Переменные, объявленные с ее помощью в глобальном контексте, становятся свойствами глобального объекта (
- let: Переменные, объявленные с ее помощью в глобальном контексте, не становятся свойствами глобального объекта.
Примеры
В то время как
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 27%
Ключевые слова let и var используются для объявления переменных, но между ними есть несколько важных различий, касающихся области видимости, поднятия (hoisting) и создания блока.
Область видимости (Scope)
- var: Объявления переменных с использованием
var
имеют функциональную область видимости, что означает, что переменная, объявленная с помощью нее внутри функции, доступна везде в этой функции.- let: В отличие от
var
, let
имеет блочную область видимости. Это означает, что переменная, объявленная с помощью нее в блоке (например, в цикле или условном операторе), будет доступна только в пределах этого блока.Поднятие (Hoisting)
- var: Переменные, объявленные с ее помощью, поднимаются в начало функции или скрипта. Это означает, что они могут быть использованы до своего объявления, хотя до инициализации они будут иметь значение
undefined
.- let: Переменные, объявленные с ее помощью, также поднимаются, но не инициализируются. Попытка доступа к такой переменной до её объявления приведет к ошибке
ReferenceError
. Это поведение известно как "временная мертвая зона" (temporal dead zone, TDZ).Создание в глобальном контексте
- var: Переменные, объявленные с ее помощью в глобальном контексте, становятся свойствами глобального объекта (
window
в браузерах).- let: Переменные, объявленные с ее помощью в глобальном контексте, не становятся свойствами глобального объекта.
Примеры
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
ограничивает видимость переменной блоком, в котором она объявлена.➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍53🔥1
Зачем нужны сборщики ?
Спросят с вероятностью 10%
Сборщики (или бандлеры) играют критически важную роль в процессе создания современных веб-приложений и сайтов. Они автоматизируют и оптимизируют множество задач, связанных с подготовкой кода к продакшену. Сборщики, такие как Webpack, Rollup, Parcel и другие, обеспечивают эффективное управление зависимостями, минификацию кода, транспиляцию и множество других возможностей. Вот основные причины, по которым сборщики являются неотъемлемой частью современной веб-разработки:
1️⃣ Управление зависимостями
Позволяют управлять зависимостями проекта, автоматически разрешая их и включая в конечный бандл. Это особенно важно в больших проектах, где множество библиотек и модулей взаимодействуют друг с другом.
2️⃣ Модульность и организация кода
Поддерживают использование модулей ES6, CommonJS и других форматов модулей, что позволяет разработчикам структурировать код более эффективно, делая его читаемым и легко поддерживаемым.
3️⃣ Транспиляция
Позволяют использовать новейшие возможности JavaScript, компилируя код в формат, совместимый с более старыми браузерами. Это обеспечивает широкую совместимость кода без необходимости жертвовать современными возможностями языка.
4️⃣ Оптимизация производительности
Могут минифицировать и углифицировать JavaScript и CSS, удаляя лишние пробелы, комментарии и сокращая имена переменных. Это уменьшает размер файлов и ускоряет загрузку веб-приложений.
5️⃣ Автоматизация задач
Могут автоматизировать множество рутинных задач, таких как компиляция SASS/LESS в CSS, оптимизация изображений, генерация исходных карт (source maps) для упрощения отладки и другие.
6️⃣ Горячая замена модулей (HMR)
Поддерживают горячую замену модулей (Hot Module Replacement), что позволяет разработчикам видеть изменения в коде в реальном времени без полной перезагрузки страницы, ускоряя процесс разработки.
7️⃣ Поддержка ассетов
Умеют встраивать ассеты, такие как изображения, шрифты и статические файлы, непосредственно в конечный бандл или оптимизировать их подгрузку.
Сборщики делают процесс разработки более организованным, эффективным и безопасным, автоматизируя множество задач и обеспечивая совместимость кода с различными средами. Они являются неотъемлемой частью современного инструментария веб-разработчика, помогая справляться с вызовами разработки сложных веб-приложений и сайтов.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 10%
Сборщики (или бандлеры) играют критически важную роль в процессе создания современных веб-приложений и сайтов. Они автоматизируют и оптимизируют множество задач, связанных с подготовкой кода к продакшену. Сборщики, такие как Webpack, Rollup, Parcel и другие, обеспечивают эффективное управление зависимостями, минификацию кода, транспиляцию и множество других возможностей. Вот основные причины, по которым сборщики являются неотъемлемой частью современной веб-разработки:
1️⃣ Управление зависимостями
Позволяют управлять зависимостями проекта, автоматически разрешая их и включая в конечный бандл. Это особенно важно в больших проектах, где множество библиотек и модулей взаимодействуют друг с другом.
2️⃣ Модульность и организация кода
Поддерживают использование модулей ES6, CommonJS и других форматов модулей, что позволяет разработчикам структурировать код более эффективно, делая его читаемым и легко поддерживаемым.
3️⃣ Транспиляция
Позволяют использовать новейшие возможности JavaScript, компилируя код в формат, совместимый с более старыми браузерами. Это обеспечивает широкую совместимость кода без необходимости жертвовать современными возможностями языка.
4️⃣ Оптимизация производительности
Могут минифицировать и углифицировать JavaScript и CSS, удаляя лишние пробелы, комментарии и сокращая имена переменных. Это уменьшает размер файлов и ускоряет загрузку веб-приложений.
5️⃣ Автоматизация задач
Могут автоматизировать множество рутинных задач, таких как компиляция SASS/LESS в CSS, оптимизация изображений, генерация исходных карт (source maps) для упрощения отладки и другие.
6️⃣ Горячая замена модулей (HMR)
Поддерживают горячую замену модулей (Hot Module Replacement), что позволяет разработчикам видеть изменения в коде в реальном времени без полной перезагрузки страницы, ускоряя процесс разработки.
7️⃣ Поддержка ассетов
Умеют встраивать ассеты, такие как изображения, шрифты и статические файлы, непосредственно в конечный бандл или оптимизировать их подгрузку.
Сборщики делают процесс разработки более организованным, эффективным и безопасным, автоматизируя множество задач и обеспечивая совместимость кода с различными средами. Они являются неотъемлемой частью современного инструментария веб-разработчика, помогая справляться с вызовами разработки сложных веб-приложений и сайтов.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31❤6🔥2
Что такое this ?
Спросят с вероятностью 17%
this является ключевым словом, которое используется в функциях и методах и указывает на объект, в контексте которого они были вызваны.Его значение зависит от того, как именно вызывается функция, и может изменяться в различных контекстах выполнения.
Контексты использования:
1️⃣ Глобальный контекст: глобальном контексте (вне каких-либо функций) он ссылается на глобальный объект. В браузере глобальным объектом является window, в Node.js — global.
2️⃣ Функции (не строгий режим): В функциях, вызванных обычным способом (не как методы объекта), он ссылается на глобальный объект. В строгом режиме (
3️⃣ Методы объекта: Когда функция вызывается как метод объекта, он ссылается на объект, частью которого является метод.
4️⃣ Конструкторы: В функции-конструкторе, вызванной с
5️⃣ Стрелочные функции: Стрелочные функции не имеют собственного контекста, вместо этого они захватывают его из внешнего лексического окружения.
6️⃣ Явное привязывание: С помощью методов
Важность понимания this
Понимание механизма его работы важно для эффективного использования, особенно при работе с объектно-ориентированным кодом и при создании сложных веб-приложений, где часто требуется контролировать контекст выполнения функций и методов.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 17%
this является ключевым словом, которое используется в функциях и методах и указывает на объект, в контексте которого они были вызваны.Его значение зависит от того, как именно вызывается функция, и может изменяться в различных контекстах выполнения.
Контексты использования:
1️⃣ Глобальный контекст: глобальном контексте (вне каких-либо функций) он ссылается на глобальный объект. В браузере глобальным объектом является window, в Node.js — global.
console.log(this === window); // в браузере вернет true
2️⃣ Функции (не строгий режим): В функциях, вызванных обычным способом (не как методы объекта), он ссылается на глобальный объект. В строгом режиме (
"use strict"
) this
будет undefined
, если функция вызвана не как метод объекта.function show() {
console.log(this === window); // true в браузере в нестрогом режиме
console.log(this); // undefined в строгом режиме
}
show();
3️⃣ Методы объекта: Когда функция вызывается как метод объекта, он ссылается на объект, частью которого является метод.
const obj = {
myMethod() {
console.log(this);
}
};
obj.myMethod(); // this ссылается на obj
4️⃣ Конструкторы: В функции-конструкторе, вызванной с
new
, он ссылается на вновь созданный объект.function Person(name) {
this.name = name;
}
const person = new Person("Alice");
console.log(person.name); // Alice
5️⃣ Стрелочные функции: Стрелочные функции не имеют собственного контекста, вместо этого они захватывают его из внешнего лексического окружения.
const obj = {
method: function() {
const arrowFunc = () => console.log(this);
arrowFunc(); // this ссылается на obj
}
};
obj.method();
6️⃣ Явное привязывание: С помощью методов
call
, apply
и bind
можно явно указать контекст для функции.function show() {
console.log(this);
}
const obj = {name: "Explicit context"};
show.call(obj); // this в show() ссылается на obj
Важность понимания this
Понимание механизма его работы важно для эффективного использования, особенно при работе с объектно-ориентированным кодом и при создании сложных веб-приложений, где часто требуется контролировать контекст выполнения функций и методов.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍49🔥4❤3👾2
Что такое операторы сравнения?
Спросят с вероятностью 10%
Операторы сравнения используются для сравнения двух значений и возвращают логическое значение:
Виды:
- Равенство (
- Не равно (
- Строгое равенство (
- Строгое не равенство (
- Больше (
- Больше или равно (
- Меньше (
- Меньше или равно (
Примеры:
Важные моменты:
- При использовании операторов равенства (
- Операторы сравнения часто используются в условных операторах (
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 10%
Операторы сравнения используются для сравнения двух значений и возвращают логическое значение:
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
), позволяя управлять потоком выполнения программы в зависимости от результатов сравнения.➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23❤4🔥4👾1
Что такое чистая функция ?
Спросят с вероятностью 10%
Чистая функция — это концепция, особенно популярная в функциональном программировании, которая описывает функцию, обладающую следующими характеристиками:
1️⃣ Детерминированность: Возвращаемое значение зависит только от её входных параметров и не изменяется при повторных вызовах с теми же параметрами. Это означает, что функция всегда возвращает один и тот же результат при одинаковых входных данных, не обращаясь при этом к внешним состояниям или данным.
2️⃣ Отсутствие побочных эффектов: Не вызывает побочных эффектов в приложении, то есть не изменяет состояние программы или внешнего окружения (например, не изменяет глобальные переменные, не записывает данные на диск, не выводит информацию на экран и т.д.). Все, что делает чистая функция — это обрабатывает входные данные и возвращает результат.
Пример:
Пример нечистой функции:
Функция
Преимущества чистых функций:
✅ Простота тестирования: Легко тестировать, так как их поведение зависит только от входных данных.
✅ Предсказуемость: Отсутствие побочных эффектов и зависимость только от входных параметров делает поведение их предсказуемым.
✅ Повторное использование: Могут быть легко переиспользованы в различных частях программы.
✅ Модульность: Программы, построенные с использованием их, обычно обладают высокой модульностью и легкостью в поддержке и расширении.
Чистые функции являются основой функционального программирования и способствуют написанию более чистого, понятного и управляемого кода.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 10%
Чистая функция — это концепция, особенно популярная в функциональном программировании, которая описывает функцию, обладающую следующими характеристиками:
1️⃣ Детерминированность: Возвращаемое значение зависит только от её входных параметров и не изменяется при повторных вызовах с теми же параметрами. Это означает, что функция всегда возвращает один и тот же результат при одинаковых входных данных, не обращаясь при этом к внешним состояниям или данным.
2️⃣ Отсутствие побочных эффектов: Не вызывает побочных эффектов в приложении, то есть не изменяет состояние программы или внешнего окружения (например, не изменяет глобальные переменные, не записывает данные на диск, не выводит информацию на экран и т.д.). Все, что делает чистая функция — это обрабатывает входные данные и возвращает результат.
Пример:
function add(a, b) {
return a + b;
}
Функция
add
является чистой, потому что она всегда возвращает одно и то же значение для одних и тех же аргументов и не имеет побочных эффектов.Пример нечистой функции:
let counter = 0;
function incrementCounter(value) {
counter += value;
}
Функция
incrementCounter
не является чистой, так как она изменяет глобальную переменную counter
, что является побочным эффектом. Также результат выполнения функции зависит от внешнего состояния (значения counter
), что нарушает принцип детерминированности.Преимущества чистых функций:
✅ Простота тестирования: Легко тестировать, так как их поведение зависит только от входных данных.
✅ Предсказуемость: Отсутствие побочных эффектов и зависимость только от входных параметров делает поведение их предсказуемым.
✅ Повторное использование: Могут быть легко переиспользованы в различных частях программы.
✅ Модульность: Программы, построенные с использованием их, обычно обладают высокой модульностью и легкостью в поддержке и расширении.
Чистые функции являются основой функционального программирования и способствуют написанию более чистого, понятного и управляемого кода.
➡️ Примеры ответов
➡️ Список всех вопросов на Frontend Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31❤3🔥1😁1
В чём отличие null от undefined ?
Спросят с вероятностью 17%
null и undefined оба представляют значения, которые указывают на "отсутствие значения", но между ними есть ключевые отличия:
undefined
- Переменная была объявлена, но не была инициализирована, то есть ей не было присвоено какое-либо значение. Это значение по умолчанию для переменных, объявленных с помощью
- Также является типом данных. То есть
null
- Используется для явного указания на отсутствие объекта или значения. Это сигнал для программиста о том, что переменная должна служить для хранения объекта, но в данный момент она "пуста" или не указывает на какой-либо объект.
- В отличие от
Когда использовать
✅ Используйте
✅ Используйте
Сравнение
- При нестрогом сравнении (
- При строгом сравнении (
В целом, null и undefined играют важную роль в представлении и обработке отсутствия данных, но их семантическое значение и использование различаются, что важно учитывать при разработке программ.
➡️ Примеры ответов
➡️Список всех вопросов на Frontend Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 17%
null и undefined оба представляют значения, которые указывают на "отсутствие значения", но между ними есть ключевые отличия:
undefined
- Переменная была объявлена, но не была инициализирована, то есть ей не было присвоено какое-либо значение. Это значение по умолчанию для переменных, объявленных с помощью
var
, let
или const
, а также для аргументов функций, которым не были переданы значения, и для возвращаемого значения функций, которые не возвращают явно какое-либо значение.- Также является типом данных. То есть
typeof undefined
вернёт "undefined"
.null
- Используется для явного указания на отсутствие объекта или значения. Это сигнал для программиста о том, что переменная должна служить для хранения объекта, но в данный момент она "пуста" или не указывает на какой-либо объект.
- В отличие от
undefined
, он является объектом. То есть typeof null
вернёт "object"
, что может быть немного запутывающим. Это известная особенность языка, сохраняемая для обратной совместимости.Когда использовать
✅ Используйте
undefined
для проверки, была ли переменная инициализирована или определена функция/параметр.✅ Используйте
null
в качестве намеренного отсутствия какого-либо объектного значения. Это полезно, например, при инициализации переменной, которая позже должна быть назначена объекту.Сравнение
- При нестрогом сравнении (
==
) null
и undefined
считаются равными, потому что оба представляют отсутствие значения. То есть null == undefined
вернёт true
.- При строгом сравнении (
===
), которое учитывает тип данных, они считаются различными: null === undefined
вернёт false
.В целом, null и undefined играют важную роль в представлении и обработке отсутствия данных, но их семантическое значение и использование различаются, что важно учитывать при разработке программ.
➡️ Примеры ответов
➡️Список всех вопросов на Frontend Developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍50🔥5❤1