Вопросы на собеседовании по JavaScript: Объекты
В течение многих лет JavaScript является самым востребованным языком программирования. Но новичкам достаточно трудно его понять. Рассмотрим часто задаваемые вопросов по объектам 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, то будет легче легко освоить их.