Вопросы на собеседовании по 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?

Ответ

  1. Объекты могут использовать в качестве ключей только строки и символы, а Map – примитивы, функции или даже объекты.
  2. Ключи в Map упорядочены, а в объектах нет.
  3. Размер Map можно определить с помощью свойства size, в то время как для объектов это относительно сложно.
  4. Map может работать лучше в сценариях, включающих в себя частое добавление и удаление пар ключей.

Заключение

JavaScript не очень обширный язык. Если получить четкое представление о темах, которые мы регулярно используем в JavaScript, то будет легче легко освоить их.

Вадим Дворниковавтор-переводчик статьи «JavaScript Interview Questions: Objects»

Комментарии

Оставьте свой комментарий
Пока никто не оставил комментариев