Вопрос 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 Интервью Вы можете найти полезное!