В чём разница между методом Object.freeze() и ключевым словом const?
Ключевое слово const и метод Object.freeze() — это совершенно разные вещи.
Ключевое слово const применяется к привязкам (к «переменным»). Оно создаёт иммутабельную привязку, то есть — к переменной (константе), объявленной с помощью const, нельзя привязать что-то новое. Константе нельзя присвоить новое значение.
Ключевое слово const и метод Object.freeze() — это совершенно разные вещи.
Ключевое слово const применяется к привязкам (к «переменным»). Оно создаёт иммутабельную привязку, то есть — к переменной (константе), объявленной с помощью const, нельзя привязать что-то новое. Константе нельзя присвоить новое значение.
const person = {
name: "Leonardo"
};
let animal = {
species: "snake"
};
person = animal; // Uncaught TypeError: Assignment to constant variable.
Метод Object.freeze() работает со значениями. А точнее — с объектными значениями. Он делает объект иммутабельным, что защищает от изменений значения свойств этого объекта. let person = {
name: "Leonardo"
};
Object.freeze(person);
person.name = "Lima"; // Uncaught TypeError: Cannot assign to read only property 'name' of object
console.log(person);
Обратите внимание на то, что сообщение об ошибке выводится в строгом режиме. В обычном режиме операция просто не срабКошачьи и собачьи года
У меня есть кошка и собака. Они родились humanYears тому назад. Напишите функцию, которая сконвертирует humanYears в catYears и dogYears.
Правила конвертации:
Cat Years:
15 cat years в первый год
+9 cat years во второй год
+4 cat years в каждый последующий год
Dog Years
15 dog years в первый год
+9 dog years во второй год
+5 dog years в каждый последующий год
👉 @frontendInterview
У меня есть кошка и собака. Они родились humanYears тому назад. Напишите функцию, которая сконвертирует humanYears в catYears и dogYears.
Правила конвертации:
Cat Years:
15 cat years в первый год
+9 cat years во второй год
+4 cat years в каждый последующий год
Dog Years
15 dog years в первый год
+9 dog years во второй год
+5 dog years в каждый последующий год
👉 @frontendInterview
Что такое «поднятие переменных»?
Сущность концепции «поднятия переменных» заключается в том, что объявления «поднимаются» в верхнюю часть текущей области видимости. В результате переменной можно воспользоваться до её объявления. Поднимаются лишь объявления переменных, но не код их инициализации. Обратите внимание на то, что поведение переменных, объявляемых с использованием ключевого слова var, отличается от поведения переменных и констант, объявленных с использованием let и const.
👉 @frontendInterview
Сущность концепции «поднятия переменных» заключается в том, что объявления «поднимаются» в верхнюю часть текущей области видимости. В результате переменной можно воспользоваться до её объявления. Поднимаются лишь объявления переменных, но не код их инициализации. Обратите внимание на то, что поведение переменных, объявляемых с использованием ключевого слова var, отличается от поведения переменных и констант, объявленных с использованием let и const.
👉 @frontendInterview
Что выведет данный код?
Этот код выведет 0. Оператор delete используется для удаления свойств объектов. А x — это не свойство объекта — это локальная переменная. Оператор delete не воздействует на локальные переменные.
👉 @frontendInterview
Этот код выведет 0. Оператор delete используется для удаления свойств объектов. А x — это не свойство объекта — это локальная переменная. Оператор delete не воздействует на локальные переменные.
👉 @frontendInterview
Что выведет следующий код?
Этот код выведет xyz. Свойство company является не свойством объекта emp1, а свойством его прототипа. Оператор delete не удаляет свойства прототипов объектов. У объекта emp1 нет собственного свойства company. Проверить это можно так:
👉 @frontendInterview
Этот код выведет xyz. Свойство company является не свойством объекта emp1, а свойством его прототипа. Оператор delete не удаляет свойства прототипов объектов. У объекта emp1 нет собственного свойства company. Проверить это можно так:
console.log(emp1.hasOwnProperty('company')); // false
Если нам всё же необходимо удалить это свойство — сделать это можно, либо напрямую обратившись к объекту Employee (delete Employee.company), либо — обратившись к прототипу объекта emp1, воспользовавшись его свойством proto (delete emp1.proto.company).👉 @frontendInterview
Web Components in Action (2019)
Веб-компоненты - это стандартизированный способ создания многоразовых пользовательских элементов для веб-страниц и приложений с использованием HTML, CSS и JavaScript. Веб-компонент хорошо инкапсулирован, сохраняет свою внутреннюю структуру отдельно от других элементов страницы, чтобы они не сталкивались с остальной частью кода. Работая с книгой, вы научитесь проектировать, создавать и развертывать повторно используемые веб-компоненты с нуля.
👉 @frontendInterview
Веб-компоненты - это стандартизированный способ создания многоразовых пользовательских элементов для веб-страниц и приложений с использованием HTML, CSS и JavaScript. Веб-компонент хорошо инкапсулирован, сохраняет свою внутреннюю структуру отдельно от других элементов страницы, чтобы они не сталкивались с остальной частью кода. Работая с книгой, вы научитесь проектировать, создавать и развертывать повторно используемые веб-компоненты с нуля.
👉 @frontendInterview
Последний выживший
Вам дана строка и массив чисел. Числа обозначают позиции букв в строке, которые должны быть удалены. После удаления уменьшается length массива. Верните букву, которая останется в массиве после удаления.
Пример:
👉 @frontendInterview
Вам дана строка и массив чисел. Числа обозначают позиции букв в строке, которые должны быть удалены. После удаления уменьшается length массива. Верните букву, которая останется в массиве после удаления.
Пример:
let str = "zbk", arr = [0, 1]
str = "bk", arr = [1]
str = "b", arr = []
return 'b'👉 @frontendInterview
React Design Patterns and Best Practices (2019)
В книге рассказывается о том, как, работая с React.js, применять существующие шаблоны проектирования в разных ситуациях, будь то новые или уже существующие проекты. Книга поможет вам начать работать с React, создавая ваши проекты более гибкими, эффективными и простыми в обращении, значительно повышая скорость рабочего процесса без снижения качества.
👉 @frontendInterview
В книге рассказывается о том, как, работая с React.js, применять существующие шаблоны проектирования в разных ситуациях, будь то новые или уже существующие проекты. Книга поможет вам начать работать с React, создавая ваши проекты более гибкими, эффективными и простыми в обращении, значительно повышая скорость рабочего процесса без снижения качества.
👉 @frontendInterview
Можете ли вы описать основное различие методов массивов forEach() и map()? В каких ситуациях вы предпочли бы один из этих методов другому?
Для того чтобы понять разницу между этими методами — поговорим об особенностях работы каждого из них.
Вот как работает .forEach():
1. Он перебирает элементы массива.
2. Он выполняет переданную ему функцию обратного вызова для каждого элемента массива.
3. Он ничего не возвращает.
1. Он перебирает элементы массива.
2. Он преобразует каждый элемент исходного массива в элемент нового массива, вызывая переданную ему функцию для каждого элемента исходного массива.
👉 @frontendInterview
Для того чтобы понять разницу между этими методами — поговорим об особенностях работы каждого из них.
Вот как работает .forEach():
1. Он перебирает элементы массива.
2. Он выполняет переданную ему функцию обратного вызова для каждого элемента массива.
3. Он ничего не возвращает.
const a = [1, 2, 3];Вот краткая характеристика метода .map():
const doubled = a.forEach((num, index) => {
// Сделать что-то с num и/или с index.
});
// doubled = undefined
1. Он перебирает элементы массива.
2. Он преобразует каждый элемент исходного массива в элемент нового массива, вызывая переданную ему функцию для каждого элемента исходного массива.
const a = [1, 2, 3];В результате оказывается, что основное различие между .forEach() и .map() заключается в том, что .map() возвращает новый массив. Если вам нужно получить результат преобразования элементов исходного массива, не меняя этот массив, тогда стоит выбрать .map(). Если же нужно просто перебрать элементы массива — тогда можно воспользоваться .forEach().
const doubled = a.map(num => {
return num * 2;
});
// doubled = [2, 4, 6]
👉 @frontendInterview