Рубрики
Без рубрики

21 Основные вопросы интервью JavaScript

Интервью на должность в качестве разработчика JavaScript? Вот 21 существенные вопросы, которые вам нужно знать ответ.

Автор оригинала: Nishant.

Вопрос 1

1. В чем разница между неопределенными и не определенными в JavaScript?

В JavaScript, если вы попытаетесь использовать переменную, которая не существует и не была объявлена, то JavaScript бросит ошибку Вар имя не определено и скрипт прекратит выполнение. Однако, если вы используете typeof undeclared_variable тогда это вернется undefined Отказ

Прежде чем получить дальше в это, давайте сначала понять разницу между Декларацией и определением.

Скажем, var x Является ли декларация, потому что вы не определили, какое значение он покажет, но вы объявили о своем существовании и потребность в распределении памяти.

> var x; // declaring x
> console.log(x); //output: undefined 

Здесь var как декларация, так и определение (также можем сказать, что мы делаем инициализацию). В приведенном выше примере объявление и присвоение значения происходят встроенные для переменной X. В JavaScript каждая переменная или функциональная декларация, которую вы приносите на вершину текущего объема, называются Подъем Отказ

Назначение происходит в порядке, поэтому, когда мы пытаемся получить доступ к переменной, которая объявлена, но еще не определена, мы получим результат undefined Отказ

var x; // Declaration
if(typeof x === 'undefined') // Will return true

Если переменная, которая не объявляется и не определена, когда мы пытаемся ссылаться на такую переменную, мы получили результат не определен Отказ

> console.log(y);  // Output: ReferenceError: y is not defined

вопрос 2

Что будет выходом кода ниже?

var y = 1;
  if (function f(){}) {
    y += typeof f;
  }
  console.log(y);

Вывод будет 1 осение Отказ Если Заявление о состоянии оценивает использование Eval Итак, EVAL (функция f () {}) Возвращает Функция f () {} (что является правдой). Поэтому внутри Если Заявление, выполнение Тип f Возвращает undefined потому что Если Код оператора выполняется во время выполнения, а оператор внутри Если Состояние оценивается во время выполнения.

var k = 1;
  if (1) {
    eval(function foo(){});
    k += typeof foo;
  }
  console.log(k); 

Код выше также выводится 1 осение Отказ

var k = 1;
  if (1) {
    function foo(){};
    k += typeof foo;
  }
  console.log(k); // output 1function

Вопрос 3

Что такое недостаток создания истинных частных методов в JavaScript?

Одним из недостатков создания истинных частных методов в JavaScript заключается в том, что они очень неэффективны памятью, так как новая копия метода будет создана для каждого экземпляра.

var Employee = function (name, company, salary) {
    this.name = name || "";       //Public attribute default value is null
    this.company = company || ""; //Public attribute default value is null
    this.salary = salary || 5000; //Public attribute default value is null

    // Private method
    var increaseSalary = function () {
        this.salary = this.salary + 1000;
    };

    // Public method
    this.dispalyIncreasedSalary = function() {
        increaseSlary();
        console.log(this.salary);
    };
};

// Create Employee class object
var emp1 = new Employee("John","Pluto",3000);
// Create Employee class object
var emp2 = new Employee("Merry","Pluto",2000);
// Create Employee class object
var emp3 = new Employee("Ren","Pluto",2500);

Здесь каждый экземпляр переменной EMP1 , EMP2 , EMP3 имеет свою собственную копию Увеличение Частный метод.

Итак, как рекомендация, не используйте частные методы, если это не нужно.

21 JS Вопросы собеседования

Вопрос 4

Что такое «закрытие» в JavaScript? Обеспечить пример

Закрытие – это функция, определенная внутри другой функции (называемая родительской функцией) и имеет доступ к переменным, которые объявлены и определены в родительской функции.

Закрытие имеет доступ к переменным в трех спецификациях:

  • Переменные, объявленные в их собственном объеме
  • Переменные, объявленные в родительской функции
  • Переменные, объявленные в глобальном пространстве имен
var globalVar = "abc"; 

// Parent self invoking function 
(function outerFunction (outerArg) { // begin of scope outerFunction
    // Variable declared in outerFunction function scope 
    var outerFuncVar = 'x';    
    // Closure self-invoking function 
    (function innerFunction (innerArg) { // begin of scope innerFunction
        // variable declared in innerFunction function scope
        var innerFuncVar = "y"; 
        console.log(          
            "outerArg = " + outerArg + "\n" +
            "outerFuncVar = " + outerFuncVar + "\n" +
            "innerArg = " + innerArg + "\n" +
            "innerFuncVar = " + innerFuncVar + "\n" +
            "globalVar = " + globalVar);
 
    }// end of scope innerFunction)(5); // Pass 5 as parameter 
}// end of scope outerFunction )(7); // Pass 7 as parameter 

Innerfunction это закрытие, которое определяется внутри Научная функция И имеет доступ ко всем переменным, объявленным и определенным в Научная функция сфера. Кроме того, функция, определенная внутри другой функции, в качестве закрытия, будет иметь доступ к переменным, объявленным в Глобальное пространство имен Отказ

Таким образом, вывод кода выше будет:

outerArg = 7
outerFuncVar = x
innerArg = 5
innerFuncVar = y
globalVar = abc

Вопрос 5.

Напишите функцию MUL, которая будет создавать следующие выходы, когда вызываются:

console.log(mul(2)(3)(4)); // output : 24 
console.log(mul(4)(3)(4)); // output : 48

Ниже приведен ответ с последующим объяснением того, как он работает:

function mul (x) {
    return function (y) { // anonymous function 
        return function (z) { // anonymous function 
            return x * y * z; 
        };
    };
}

Здесь Мул Функция принимает первый аргумент и возвращает анонимную функцию, которая принимает второй параметр и возвращает другую анонимную функцию, которая возьмет третий параметр и возвращает умножение аргументов, которые были переданы.

В JavaScript функция, определенная внутри другой, имеет доступ к переменным внешней функции. Следовательно, функция – это первый классный объект, который может быть возвращен другими функциями, а также передан как аргумент в другой функции.

  • Функция является экземпляром типа объекта
  • Функция может иметь свойства и имеет ссылку обратно к способу конструктора
  • Функция может быть сохранена в виде переменной
  • Функция может быть передана в качестве параметра к другой функции
  • Функция может быть возвращена из другой функции

Техническое интервью Live Mock – JavaScript

Вопрос 6.

Как опорожнить массив в JavaScript?

Например,

 var arrayList =  ['a','b','c','d','e','f'];

Как мы можем опустошить массив выше?

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

Метод 1.

arrayList = []

Над кодом установит переменную ArrayList на новый пустой массив. Это рекомендуется, если у вас нет Ссылки на оригинальный массив ArrayList где-нибудь еще, потому что он фактически создаст новый пустой массив. Вы должны быть осторожны с этим способом опорожнения массива, потому что если вы ссылались на этот массив из другой переменной, то исходный эталонный массив останется без изменений.

Например,

var arrayList = ['a','b','c','d','e','f']; // Created array 
var anotherArrayList = arrayList;  // Referenced arrayList by another variable 
arrayList = []; // Empty the array 
console.log(anotherArrayList); // Output ['a','b','c','d','e','f']

Метод 2.

arrayList.length = 0;

Вышеуказанный код очистит существующий массив, установив ее длину до 0. Этот способ опорожнения массива также обновляет все эталонные переменные, которые указывают на исходный массив. Следовательно, этот метод полезен, когда вы хотите обновить все ссылочные переменные, указывающие на ArrayList Отказ

Например,

var arrayList = ['a','b','c','d','e','f']; // Created array 
var anotherArrayList = arrayList;  // Referenced arrayList by another variable 
arrayList.length = 0; // Empty the array by setting length to 0
console.log(anotherArrayList); // Output []

Метод 3

arrayList.splice(0, arrayList.length);

Выше ее реализация также будет работать идеально. Этот способ опорожнения массива также обновит все ссылки на исходный массив.

var arrayList = ['a','b','c','d','e','f']; // Created array 
var anotherArrayList = arrayList;  // Referenced arrayList by another variable 
arrayList.splice(0, arrayList.length); // Empty the array by setting length to 0
console.log(anotherArrayList); // Output []

Метод 4.

while(arrayList.length){
  arrayList.pop();
}

Приведенная выше реализация также может пустыми массивами, но обычно не рекомендуется часто использовать этот метод.

Вопрос 7.

Как вы проверяете, является ли объект массивом или нет?

Лучший способ узнать, является ли объект экземпляром определенного класса – использовать TOSTRING Метод от Объект. Прототип :

  var arrayList = [1,2,3];

Одно из лучших случаев использования типовых проверки объекта – это когда мы выполняем метод перегрузки в JavaScript. Например, скажем, у нас есть метод под названием приветствовать , который принимает одну синувую строку, а также список строк. Чтобы сделать нашему методу приветствия в обеих ситуациях, нам нужно знать, какой параметр проходит. Это одно значение или список значений?

function greet(param){
 	if(){ // here have to check whether param is array or not 
 	}else{
 	}
}

Однако, поскольку вышеупомянутая выше, может не обязательно проверить тип для массивов, мы можем проверить на одну строку значений и поместить код логики массива в остальном блоке. Например:

function greet(param){
 	if(typeof param === 'string'){ 
 	}else{
 	  // If param is of type array then this block of code would execute
 	}
}

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

Возвращаясь к проверке типа объекта, как упоминалось ранее, мы можем использовать Object.Prototype.tostring.

if( Object.prototype.toString.call( arrayList ) === '[object Array]' ) {
    console.log('Array!');
}

Если вы используете jquery , тогда вы также можете использовать jQuery ИСАРАЙ Метод:

if($.isArray(arrayList)){
    console.log('Array');
}else{
  	console.log('Not an array');
}

FYI, jQuery использует Object.Prototypee.tostring.call Внутренне проверять, является ли объект массивом или нет.

В современных браузерах вы также можете использовать

Array.isArray(arrayList);

Array.isarray Поддерживается Chrome 5, Firefox 4.0, IE 9, Opera 10.5 и Safari 5

Вопрос 8.

Что будет выходом следующего кода?

var output = (function(x){
    delete x;
    return x;
  })(0);
  
  console.log(output);

Вывод будет 0 Отказ Удалить Оператор используется для удаления свойств от объекта. Здесь х не объект, а Локальная переменная Отказ Удалить Операторы не влияют на локальные переменные.

Вопрос 9.

Что будет выходом следующего кода?

var x = 1;
var output = (function(){
    delete x;
    return x;
  })();
  
  console.log(output);

Вывод будет 1 Отказ Удалить Оператор используется для удаления свойства объекта. Здесь х не является объектом, а скорее это Глобальная переменная типа Номер Отказ

Вопрос 10.

Что будет выходом кода ниже?

var x = { foo : 1};
var output = (function(){
    delete x.foo;
    return x.foo;
  })();
  
  console.log(output);

Вывод будет undefined Отказ Удалить Оператор используется для удаления свойства объекта. Здесь х это объект, который имеет свойство Foo , и как это самозазывная функция, мы будем удалять Foo Недвижимость от объекта х Отказ После этого, когда мы пытаемся ссылаться на удаленное свойство Foo результат это undefined Отказ

Вопрос 11.

Что будет выходом кода ниже?

var Employee = {
  company: 'xyz'
}
var emp1 = Object.create(Employee);
delete emp1.company
console.log(emp1.company);

Вывод будет XYZ Отказ Здесь EMP1 Объект имеет Компания как его Прототип имущество. Удалить Оператор не удаляет свойство прототипа.

EMP1 Объект не имеет Компания в качестве собственного недвижимости. Вы можете проверить это Console.log (EMP1.HasownProperty («Компания»));//вывод: false Отказ Тем не менее, мы можем удалить Компания Собственность непосредственно от Сотрудник Объект, использующий Удалить watereee.company Отказ Или мы также можем удалить EMP1 Объект, используя __proto__ Недвижимость delete emp1.__proto__.company Отказ

Вопрос 12.

Что такое неопределенный х 1 в JavaScript?

var trees = ["redwood","bay","cedar","oak","maple"];
delete trees[3];

Когда вы запускаете код выше и введите console.log (деревья); в вашу консоль разработчиков Chrome, вы получите [«Редвуд», «Бэй», «кедр», неопределенный × 1, «Maple»] Отказ Когда вы запустите код в консоли браузера Firefox, вы получите ["Redwood", "Bay", "Cedar", undefined, "Maple"] Отказ Таким образом, ясно, что браузер Chrome имеет свой собственный способ отображения неинициализированных индексов в массивах. Однако, когда вы проверяете деревья [3] В обоих браузерах вы получите аналогичный вывод как правда Отказ

Примечание: Пожалуйста, помните, что вам не нужно проверять неинициализированный индекс массива в деревья [3] , как это даст вам ошибку. 'undefined × 1' это просто способ отображения неинициализированного индекса массива в Chrome.

Вопрос 13.

Что будет выходом кода ниже?

var trees = ["xyz","xxxx","test","ryan","apple"];
delete trees[3];
  
  console.log(trees.length);

Вывод будет 5 Отказ Когда мы используем Удалить Оператор для удаления элемента массива, длина массива не зависит от этого. Это держит, даже если вы удалили все элементы массива, используя Удалить оператор.

Другими словами, когда Удалить Оператор удаляет элемент массива, что удаленный элемент больше не присутствует в массиве. Вместо значения при удаленном индексе undefined x 1 в хром и undefined размещается по индексу. Если вы делаете console.log (Деревья) Выход [«XYZ», «XXXX», «TEST», undefined × 1, «Apple»] в хроме и в Firefox [«XYZ», «XXXX», «TEST», undefined, «Apple»] Отказ

Вопрос 14.

Что будет выходом кода ниже?

var bar = true;
console.log(bar + 0);   
console.log(bar + "xyz");  
console.log(bar + true);  
console.log(bar + false);   

Код выводится 1, "Truexyz", 2, 1 Отказ Вот общий ориентин для операторов дополнения:

  • Номер + номер -> Дополнение
  • Boolean + Number -> Дополнение
  • Boolean + Number -> Дополнение
  • Номер + строка -> Concatenation
  • String + Boolean -> Concatenation
  • Строка + строка -> Concatenation

Вопрос 15.

Что будет выходом кода ниже?

var z = 1, y = z = typeof y;
console.log(y);  

Вывод будет undefined Отказ Согласно Ассоциативность Правило, операторы с одинаковым приоритетом обрабатываются на основе свойства ассоциативности оператора. Здесь ассоциативность оператора назначения является Право налево Итак, Тип y сначала оценит, что это undefined Отказ Это будет назначено z , а потом y будет присвоен значение z, а затем z будет присвоен значение 1 Отказ

Вопрос 16.

Что будет выходом кода ниже?

// NFE (Named Function Expression 
var foo = function bar(){ return 12; };
typeof bar();  

Вывод будет Опорная ошибка . Отказ Чтобы сделать код выше работы, вы можете переписать его следующим образом:

Образец 1.

var bar = function(){ return 12; };
typeof bar();  

или же

Образец 2.

function bar(){ return 12; };
typeof bar();  

Определение функции может иметь только одну ссылочную переменную в качестве имени его функции. В Образец 1 , бар Опорные переменные указывает на Анонимная функция Отказ В Образец 2 Определение функции является функцией имени.

var foo = function bar(){ 
    // foo is visible here 
    // bar is visible here
 	console.log(typeof bar()); // Work here :)
 };
// foo is visible here
// bar is undefined here

Вопрос 17.

В чем разница между декларациями функций ниже?

var foo = function(){ 
    // Some code
}; 
function bar(){ 
    // Some code
}; 

Главное отличие – это функция Foo определяется в время работы тогда как функция бар определяется во время анализа. Чтобы понять это лучше, давайте посмотрим на код ниже:

Run-Time function declaration 


Еще одно преимущество этого первого одностороннего способа объявления заключается в том, что вы можете объявить функции на основе определенных условий. Например:


Однако, если вы попытаетесь запустить аналогичный код, используя формат ниже, вы получите ошибку:


Вопрос 18.

Что такое функциональный подъемник в JavaScript?

Функция выражения

var foo = function foo(){ 
 	return 12; 
}; 

В JavaScript переменная и функции являются подниматься Отказ Давайте сделаем функцию Подъем первый. По сути, интерпретатор JavaScript смотрит в будущее, чтобы найти все переменные объявления, а затем поднимать их на вершину функции, где они объявлены. Например:

foo(); // Here foo is still undefined 
var foo = function foo(){ 
 	return 12; 
}; 

За сценой кода выше выглядит так:

var foo = undefined;
    foo(); // Here foo is undefined 
 	   foo = function foo(){
 	      / Some code stuff
      }
var foo = undefined;
 	 foo = function foo(){
 	     / Some code stuff
    }
    foo(); // Now foo is defined here

Вопрос 19.

Что будет выпуском кода ниже?

var salary = "1000$";

 (function () {
     console.log("Original salary was " + salary);

     var salary = "5000$";

     console.log("My New Salary " + salary);
})();

Вывод будет undefined, 5000 $ Отказ Новички часто обманывают концепцией подъема JavaScript. В указанном выше коде вы можете ожидать зарплата сохранить свою ценность от внешнего охвата до такой степени, что зарплата Получается повторно объявлена во внутреннем объеме. Однако из-за Подъем , ценность зарплаты было undefined вместо. Чтобы понять это лучше, посмотрите код ниже:

var salary = "1000$";

(function () {
    var salary = undefined;
    console.log("Original salary was " + salary);

    salary = "5000$";

    console.log("My New Salary " + salary);
})();

зарплата Переменная поднимается и объявляется сверху в области применения. console.log Внутри возвращения undefined Отказ После console.log , зарплата Redeclared и назначен 5000 $ Отказ

Вопрос 20.

Что такое оператор InstanceOF в JavaScript? Что было бы выпуском кода ниже?

function foo(){ 
  return foo; 
}
new foo() instanceof foo;

Здесь Instanceof Оператор проверяет текущий объект и возвращает true, если объект имеет указанный тип.

Например:

var dog = new Animal();
dog instanceof Animal // Output : true

Здесь Экземпляр собаки животных верно с собака наследует от Животное. Прототип Отказ

var name = new String("xyz");
name instanceof String // Output : true

Здесь Имя instanceof string верно с собака наследует от String.Prototype Отказ Теперь давайте понять код ниже:

function foo(){ 
  return foo; 
}
new foo() instanceof foo;

Здесь функция Foo возвращается Foo , который снова указывает на функцию Foo Отказ

function foo(){
  return foo; 
}
var bar = new foo();
// here bar is pointer to function foo(){return foo}.

Итак, new foo () instanceof foo Возвращение ложь ;

Ссылка на ссылку

Вопрос 21.

Если у нас есть ассоциативный массив JavaScript

var counterArray = {
    A : 3,
  	B : 4
};
counterArray["C"] = 1;

Как мы можем рассчитать длину вышеупомянутых ассоциативных массивов счетчика счетчика?

Нет встроенных функций и свойств, доступных для расчета длины ассоциативного объекта массива здесь. Однако есть и другие способы, с помощью которых мы можем рассчитать длину объекта ассоциативного массива. В дополнение к этому, мы также можем продлить Объект Добавляя метод или свойство для прототипа, чтобы рассчитать длину. Однако расширение объекта может нарушить перерыв в различных библиотеках или может создавать проблемы с перекрестным браузером, поэтому он не рекомендуется, если это не нужно. Опять же, есть различные способы, с помощью которых мы можем рассчитать длину.

Объект имеет Ключи Способ, который можно использовать для расчета длины объекта:

We can also calculate the length of an object by iterating through an object and by counting the object's own property.  

```javascript
function getSize(object){
  var count = 0;
  for(key in object){
    // hasOwnProperty method check own property of object
    if(object.hasOwnProperty(key)) count++;
  }
  return count;
}

Мы также можем добавить Длина Способ непосредственно на Объект :

Object.length = function(){
  	var count = 0;
  for(key in object){
    // hasOwnProperty method check own property of object
    if(object.hasOwnProperty(key)) count++;
  }
  return count;
}
//Get the size of any object using
console.log(Object.length(counterArray))

Бонус : Мы также можем использовать Подчеркивание (Рекомендуется, так как он легкий) для расчета длины объекта.

Вот a Live Mock JavaScript Интервью Вы можете найти полезное!