Инструменты пользователя

Инструменты сайта


javascript

Вопросы и ответы при собеседовании по теме JavaScript

Вопросы

Данные

  • Какие типы данных есть в JS?
  • Какие типы в JS являются изменяемыми, а какие нет?
  • Что означает ссылка на переменную?
  • Что такое NaN? Как я могу проверить, является ли переменная NaN?
  • Что значит создать переменную с помощью конструктора или литерала?
  • Когда следует использовать точечную нотацию при доступе к свойству объекта, а когда через строку в квадратных скобках?
  • Что произойдет, если вы попытаетесь получить свойство, которого нет в объекте?
  • Что делает hasOwnProperty?
  • Когда использовать null, а когда undefined?
  • Как можно создавать глобальные переменные?
  • Для чего нужна директива use strict?

Выражения

  • Что такое выражения и инструкции? В чем разница между ними?
  • В чем разница между `var`,` let`, `const`? Почему использование `const` может быть предпочтительнее?
  • Что такое тернарный оператор?
  • Что делает оператор `for..in`? В чем особенности использования этого оператора с массивами?
  • Как безопасно проверить, что переменная существует (была объявлена), и не поймать ошибку ReferenceError?

Массивы

  • Способы создания массивов (литерал, конструктор, фабричные методы `Array.from ()` и `Array.of ()`);
  • Удаление элемента из массива (какие есть способы и особенности);
  • Свойство `length` массива
    • Какое значение будет иметь свойство length массива a и почему:
    `  const a = [1, 2, 3];
      a [10] = 4;`
  • Что произойдет, если переназначить новое значение?
  • Влияет ли `length` на удаление элемента в середине массива? Какие способы удаления предметов влияют на длину, а какие нет?
  • Как проверить, что переменная содержит массив?
  • Что они делают, как и когда использовать следующие методы:
  • `reduce`
  • `sort`
  • `filter`
  • `map`
  • `forEach`
  • `some`
  • `every`

Функции

  • Какие 4 шаблона вызова функций задают контекст для выполнения этой функции?
    • Как директива use strict влияет на this внутри функции?
  • Какой самый простой шаблон для облегчения чтения функции, когда у нее огромное количество аргументов?
  • Как получить все аргументы функции (включая те, которые не объявлены, но все же были переданы)?
  • Что такое рекурсия? Когда им удобно пользоваться?
  • Что такое закрытия и когда они могут быть полезны? Как мы можем сохранить состояние с закрытием и для чего это состояние можно использовать?
  • Как реализовать функцию `bind`?
  • Для решения следующей задачи: пусть у нас будет массив ссылок, и наша задача сделать так, чтобы при нажатии на каждую отображался ее порядковый номер. Первое решение, которое приходит на ум, выглядит так: на самом деле оказывается, что когда вы нажимаете на любую ссылку, отображается то же самое число * значение `links.length`. Почему так происходит и как исправить эту гадость?
 ` for (var i = 0; i <links.length; i ++) {links [i] .onclick = function () {alert (i); }
  }`
 * Что такое обратный вызов (функция обратного вызова)? Когда они обычно используются?
 * Что такое карри?
 * Что такое частичное применение?
 * Что такое мемоизация?

Прототипы

  • Что такое функция-конструктор? Как их создать и как ими пользоваться?
  • Что такое прототип? Какие возможности он имеет / дает?
  • Почему методы объекта лучше хранить в прототипе, а не в самом объекте?
  • Можно ли создать экземпляр функции через конструктор? И если да, то как, а если нет, то какой интерфейс вы бы реализовали для этой задачи?
  • Как создать объект, который ни от чего не наследуется?
  • Какие 3 (как минимум) способа наследования в JavaScript? Какие отличия и нюансы?
  • Как вызвать переопределенный метод родителя в переопределенном методе наследующего класса? Пример псевдокода:
  class Person method getFullName () return this.name + this.surname
  class Employee extends Person method getFullName () return super () + this.position
  • Каковы способы навсегда привязать метод класса к его экземпляру (чтобы `this` всегда был текущим экземпляром класса)?

Объекты

  • Что такое геттеры и сеттеры? Как я могу использовать их изначально в JS?
  • Дескрипторы свойств объекта: что это такое и что вы можете сделать?
  • Приведение объектов к примитивам: когда это происходит и как работает?
  • Как сделать возможным добавление двух объектов?

` const a = {x: 3};

   const b = {x: 5};
   ...
   console.log (a + b); // 8
   `
  • Как сделать так, чтобы следующее выражение возвращало `true`?
   `(c == 1 && c == 2 && c == 3)`

Массивы

  • Можно ли прервать обход элементов в методе forEach?
  • Можете ли вы использовать метод indexOf для определения позиции подмассива [3, 4] в массиве [1, 2, [3, 4], 5] `?
  • Как преобразовать строку в массив? Можно ли применять методы массива к строкам?

Функции

  • Что такое «плавающее» объявление переменных и в каком случае здесь появляются функции?
  • Влияет ли директива use strict на всплытие? Как избежать всплытия переменных?
  • Что такое IIFE (выражение немедленно вызываемой функции)? Как можно написать IIFE и почему это так работает?
  • Как мне сохранить родительский контекст при вызове немедленно вызванного выражения функции?
  • Как использовать стандартные методы массива для поддельных массивов (например, вызвать `map` на` arguments`) и почему это работает?

Регулярные выражения

  • Зачем нужны регулярные выражения?
  • Какие методы есть у экземпляров регулярных выражений в JS?
  • Какие у строк есть методы, позволяющие работать с регулярными выражениями?
  • Что такое флаги в регулярных выражениях? Расскажите о флагах глобальности, нечувствительности к регистру, многострочности.
  • Как работают методы задания количества (квантификаторы) `*`, `+`, `{3}`?
  • Что означают символы `[]` и `[^]`, `.`,`? `,` ^ `,` $ `,` | `Имеете ввиду в регулярных выражениях?
  • Что такое жадные и ленивые кванторы?
  • Как использовать основные заполнители `\ W`,` \ w`, `\ D`,` \ d`, `\ S`,` \ s`, `\ B`,` \ b`?
  • Как `\ b` работает для начала и конца строки? Почему регулярное выражение `\ babc \ b` работает для строки` abc`, а регулярное выражение `\ b \. \. \ B` не работает со строкой` ..`?
  • Когда использовать escape-символ `\`?
  • Зачем нужны группы? Как с ними работать?
  • Могу ли я создавать вложенные группы?
  • Что означают «1 доллар», «2 доллара» и т. Д.? в текстовых редакторах в поле замены, если поиск поддерживает регулярное выражение?
  • Как сделать незапоминаемую группу (группу, запись которой не будет возвращена при сопоставлении строки с регулярным выражением)?
  • Как использовать значение группы в самом регулярном выражении?
  • Решать задачи:
    • Напишите регулярное выражение для перевода выражения функции в объявление функции.
    • Напишите регулярное выражение для перевода объявления функции в выражение функции.
    • Напишите регулярное выражение для поиска всех команд Telegram в сообщении (примеры: `/ help`,` / start`, `/ active_orders`,` / order123`). Учтите, что в подстроке может быть несколько команд.

Промисы

  • Что такое обещание? Для чего это?
  • Как создать обещание?
    • В чем разница при создании обещаний с помощью конструктора и фабрики?
  • Методы `then` и` catch`
    • Что они делают?
    • Что такое цепочка обещаний?
    • Что могут возвращать их обратные вызовы и как это повлияет на состояние обещания, возвращаемого данными `then` или` catch`?
  • В чем разница между

`then (resolveHandler) .catch (rejectHandler)` и `then (resolveHandler, rejectHandler)`?

  • Можно ли отменить обещание?
  • Расскажите о методах:
    • `Promise.resolve`
    • `Promise.reject`
    • `Promise.all`
    • `Promise.race`
  • Каковы преимущества и недостатки обратных вызовов и обещаний?
  • Какое значение и состояние будет иметь следующее обещание и почему:
  `const promise = new Promise ((resolve, reject) => {resolve (0); reject (1); resolve (2);});`
javascript.txt · Последнее изменение: 2020/09/04 09:24 — oleg