Вопросы про объекты JavaScript для собеседования
На собеседованиях кандидаты часто теряются на вопросах про создание объектов, свойства и прототипное наследование: ошибки с this, неожиданные мутации и неверное использование методов приводят к провалам на задачах. В тексте разбираются конкретные кейсы - создание объектов, поведение свойств, методы и частые нюансы прототипов с примерами кода.
Вы разберётесь, как отвечать на типовые вопросы про прототипы и методы. В результате соберёте набор кратких готовых ответов с небольшими примерами кода, которые можно уверенно показать на интервью.
Вопросы и ответы по JavaScript
Вопрос
Каков результат выполнения следующего кода?
var dwayne = {}, daniel = { firstName: 'Daniel'}, jason = {key: 'jason'};
dwayne[daniel]=123;
dwayne[jason]=456;
console.log(dwayne[daniel]);Ответ
456
При установке свойства объекта JavaScript неявно приводит параметр к строковому значению. В данном случае dwayne и daniel являются объектами, поэтому будут преобразованы в "[object Object]".
В результате dwayne[dani] и dwayne[jason] эквивалентны dwayne["[object Object]"] и могут использоваться взаимозаменяемо. Поэтому ссылка на dwayne[jason] точно такая же, как и ссылка на dwayne[daniel].
Вопрос
Каким будет результат выполнения следующего кода?
const func = (function(a){
delete a;
return a;
})(5);
console.log(func);Ответ
5
Оператор delete используется для удаления свойств из объекта. В этом примере используется не объект, а локальная переменная. Оператор delete не влияет на локальные переменные.
Вопрос
Каков результат выполнения следующего фрагмента кода?
console.log({a:1} == {a:1});
console.log({a:1} === {a:1});Ответ
false
false
В JavaScript объекты сравниваются на основе ссылок. В приведенном выше примере сравниваются два разных объекта, поэтому их ссылки будут разными. Следовательно, мы получаем вывод false для обоих операторов.
Вопрос
Какой вариант лучше и почему?
const jamesBond = {
firstName: "Daniel",
lastName: "Craig",
getFullName: function () {
return `${this.firstName} ${this.lastName}`.trim();
}
};jamesBond.getFullName();или
class Person {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}Person.prototype.getFullName = function () {
return `${this.firstName} ${this.lastName}`.trim();
};const jamesBond = new Person("Daniel", "Craig");jamesBond.getFullName();Ответ
Второй вариант лучше. Так как в нем метод регистрируется в прототипе, а не в каждом объекте. Поэтому это более эффективный подход к использованию памяти.
Вопрос
В чем разница между Object и Map?
Ответ
- Объекты могут использовать в качестве ключей только строки и символы, а Map – примитивы, функции или даже объекты.
- Ключи в Map упорядочены, а в объектах нет.
- Размер Map можно определить с помощью свойства size, в то время как для объектов это относительно сложно.
- Map может работать лучше в сценариях, включающих в себя частое добавление и удаление пар ключей.
Заключение
JavaScript не очень обширный язык. Если получить четкое представление о темах, которые мы регулярно используем в JavaScript, то будет легче легко освоить их.
Комментарии