Все мы знаем, что собеседования по JavaScript (особенно собеседования с FrontEnd) могут быть довольно сложными, потому что интервьюер может задавать вопросы из старого JS, нового ES6 JS, манипуляции с элементами DOM, старого макета CSS, нового макета FlexBox и CSS Grid, алгоритмов и полноты, небольшого кода проблема, ReactJS и методы его жизненного цикла.

Итак, интервью бывают разных типов, в зависимости от их характера и содержат разные типы вопросов. Эти раунды в основном проводятся малыми и средними компаниями и не применяются к технологическим гигантам (FB, Google, Flipkart и т. Д.). Они в целом классифицируются следующим образом.
* Первый раунд - обычно телефонный- Начните с расскажите мне о себе, основные старые вопросы JS о var, React и его методах жизненного цикла.
* Первый раунд - онлайн-вопрос на временной основе - Либо набор из 30 базовых вопросов JS, CSS за 1 час или 3 сложных вопроса за 1 час.
* Первый раунд: собеседование по Skype- Начнем с того, что расскажи мне о себе, после чего последуют старые вопросы JS и небольшой компонент или программа на ReactJS / JavaScript.
* Первый раунд - Небольшие стартапы- Дайте вам небольшое дополнение к быть готовым к их существующему веб-сайту.
* Второй раунд - Личное собеседование- Снова начинается с того, что расскажите мне о себе, после чего следует простой вопрос JS на бумаге / доске.
* Третий раунд - Лицом к лицу с архитектором - Очень сложные вопросы JavaScript или решение задачи на доске.
* Четвертый раунд - Клиентский раунд - Только для сервисной компании. В основном небольшие проблемы решаются в jsfiddle путем демонстрации экрана по скайпу.
* Пятый раунд - HR- В основном переговоры о заработной плате.

Эта серия основана на моем опыте проведения и интервью, а также на мнениях многих моих друзей-разработчиков FrontEnd. Также я привел пример из потрясающей серии интервью от techsith.

Начнем с вопросов по базовому JavaScript, которые обычно задают в первом, а иногда и во втором раунде.

Вопрос 1- В чем разница между ключевыми словами let, const и var?
Ответ- Переменная var была с начала JS, но переменные let и const были недавно введены в ES6.
var имеет область видимости функции, тогда как let и const имеют область видимости блока.
Сначала мы поймем разницу между var и let. Рассмотрим пример ниже. У него есть IIFE, а внутри него есть элемент if. Оператор if создает область видимости для переменной let, но у var нет области видимости блока, поэтому к ней можно получить доступ и за ее пределами.

(function(){
  if(true){
    var v = 10;
    let l =20;    
  }
  console.log('v is ', v);
  console.log('l is ', l);
})()

Если мы запустим следующее, мы получим значение var, но ошибку ссылки для let.

Теперь мы разберемся с константой. Он был создан для объявления постоянных переменных в JavaScript. Мы не можем присвоить новое значение переменной после первоначального объявления для примитивных типов, таких как целые числа и строки, но можем добавлять значения для непримитивных типов, таких как массивы и объекты.

Давайте посмотрим на это на примерах. Переназначение целочисленного константного значения дает ошибку ссылки.

(function(){
  const c = 12;
  c = 14;
  console.log('c is ', c);
})()
/*
Exception: TypeError: invalid assignment to const `c'
@Scratchpad/1:3:3
@Scratchpad/1:1:2
*/

Переназначение строкового значения const дает ошибку ссылки.

(function(){
  const s = "coder";
  s= "developer"
  console.log('s is ', s);
})()
/*
Exception: TypeError: invalid assignment to const `s'
@Scratchpad/1:9:3
@Scratchpad/1:7:2
*/

Переназначение массива дает ошибку.

(function(){
  const arr = [1, 2, 3];
  arr = [3, 4, 5];  
  console.log('arr is ', arr);
})()
/*
Exception: TypeError: invalid assignment to const `arr'
@Scratchpad/1:15:16
@Scratchpad/1:13:2
*/

Но можно добавить значение в массив.

(function(){
  const arr = [1, 2, 3];
  arr.push(4);  
  console.log('arr is ', arr);
})()
//output - arr is [1, 2, 3, 4]

А также возможно добавление и изменение значений в объектах.

(function(){
  const obj = {name: 'Nabendu', skill: 'JS'};
  obj.skill = 'React'; 
  obj.profession= 'Developer';
  console.log('obj is ', obj);
})()
//output is obj is { name: "Nabendu", skill: "React", profession: "Developer" }

Вопрос 2- В чем разница между == и ===?
Ответ- Оба являются операторами сравнения в JavaScript. == выполняет преобразование типов перед сравнением, но === выполняет строгое сравнение и не выполняет преобразование типов.

Рассмотрим ниже для ==. Сравнение между строкой 1 и числовым значением 1 дает значение true, поскольку числовое значение 1 преобразуется в строку перед сравнением.

if('1' == 1) {
  console.log('They are equal')
}
//Output - They are equal

Теперь рассмотрим тот же пример для ===. Будет выдано false, потому что преобразование типа не выполняется.

if('1' === 1) {
  console.log('They are equal')
} else {
  console.log('They are not equal')  
}
//Output - They are not equal

Вопрос 3- В чем разница между null и undefined?
Ответ- Оба представляют собой пустые значения. Но разница в том, что вы определяете переменную и не присваиваете ей значение, которое JS присваивает undefined. null обычно назначается пользователями в тех случаях, когда они хотят очистить некоторые значения.

let a;
console.log(a);
//output - undefined

Другое отличие состоит в том, что typeof (undefined) не определен, но typeof (null) является объектом. Он должен быть нулевым, но это ошибка в JavaScript, которая возникла с первых дней.

Вопрос 3- Что такое прототипное наследование?
Ответ- Прототипное наследование означает создание новых возможностей с использованием прототипа. Рассмотрим пример ниже. Здесь мы создаем функцию-конструктор Car, а затем вызываем ее с новым ключевым словом. Теперь переменные nabsCar и shikhaCar имеют собственный экземпляр Car, но могут иметь общий прототип функции getModel ().

let Car = function(model) {
  this.model = model;
}
Car.prototype.getModel = function() {
  return this.model;
}
let nabsCar = new Car('maruti800');
console.log(nabsCar.getModel()); //Output - maruti800
let shikhaCar = new Car('hyndaiAccent');
console.log(shikhaCar.getModel()); //Output - hyndaiAccent

Примечание. У меня есть подробная серия статей об объектах и ​​прототипах. Вы можете найти это здесь".

На этом завершается первая часть вопросов на собеседовании по основам JavaScript. Вы можете найти Часть-2 здесь.