В этой статье я рассмотрю 10 каверзных вопросов на собеседовании по JavaScript.

1. Что такое Истина и Ложь?

В JavaScript истинное значение — это значение, которое считается true при встрече в логическом контексте. Все значения истинны, если только они не определены как ложные (т. е. кроме false, 0, -0, 0n, "", null, undefined и NaN).

Примеры истинных значений в JavaScript:

if (true)
if ({})
if ([])
if (42)
if ("0")
if ("false")
if (new Date())
if (-42)
if (12n)
if (3.14)
if (-3.14)
if (Infinity)
if (-Infinity)

с другой стороны, значение falsy (иногда пишется как falsey) — это значение, которое считается ложным при встрече в логическом контексте.

Примеры значений falsy в JavaScript:

if (false)
if (null)
if (undefined)
if (0)
if (-0)
if (0n)
if (NaN)
if ("")

2. В чем разница между двойным равным (==) и тройным равным (===)?

Двойное равенство (==) и тройное равенство (===) используются для проверки равенства между двумя переменными. Двойное равенство (==) возвращает истину, когда значения двух переменных совпадают, тогда как тройное равенство (===) возвращает истину, когда значение и тип двух переменных равны.

3. В чем разница между связыванием, вызовом и применением?

Bind(): метод bind() возвращает новую функцию, позволяющую передавать массив и любое количество аргументов.

Call(). Метод call() вызывает функцию с заданным значением this и аргументами, предоставляемыми один за другим. Это означает, что мы можем вызывать любую функцию и явно указывать, на что this должно ссылаться внутри вызывающей функции.

Call(). Метод call() вызывает функцию с заданным значением this и аргументами, предоставляемыми один за другим. Это означает, что мы можем вызывать любую функцию и явно указывать, на что this должно ссылаться внутри вызывающей функции.

4. Что такое окно, глобальная переменная, глобальная область видимости?

Окно. Объект окна представляет собой открытое окно в браузере.

Если документ содержит фреймы (теги ‹iframe›), браузер создает один объект окна для документа HTML и один дополнительный объект окна для каждого фрейма.

Глобальная переменная: переменная, объявленная вне функции, становится ГЛОБАЛЬНОЙ.

Глобальная переменная имеет глобальную область действия.

Глобальная область действия. Глобальная область действия означает, что все скрипты и функции на веб-странице могут получить доступ к переменной.

5.Как понимать это ключевое слово в JavaScript?

В JavaScript ключевое слово this относится к объекту, который в данный момент выполняет код. Краткая версия того, что оценивает this, выглядит следующим образом:

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

6. Что такое асинхронный Javascript setTimeout, setInterval?

setTimeout.Метод setTimeout() вызывает функцию или вычисляет выражение по прошествии указанного количества миллисекунд.

setTimeout(function(){ alert(“Hello”); }, 3000);

setInterval: метод setInterval() вызывает функцию или вычисляет выражение через указанные интервалы (в миллисекундах).

Метод setInterval() будет продолжать вызывать функцию до тех пор, пока не будет вызвана функция clearInterval() или окно не будет закрыто.

setInterval(function(){ alert("Hello"); }, 3000);

7. Найдите самый большой элемент массива.

решение:

var arr = [1,2,3];
var max = arr.reduce(function(a, b) {
    return Math.max(a, b);
});

8. Удалить повторяющийся элемент из массива.

решение:

// Defining function to get unique values from an array
 function getUnique(array){
 var uniqueArray = [];
 
 // Loop through array values
 for(i=0; i < array.length; i++){
 if(uniqueArray.indexOf(array[i]) === -1) {
 uniqueArray.push(array[i]);
 }
 }
 return uniqueArray;
 }
 
 var names = [“John”, “Peter”, “Clark”, “Harry”, “John”, “Alice”];
 var uniqueNames = getUnique(names);
 console.log(uniqueNames); // Prints: [“John”, “Peter”, “Clark”, “Harry”, “Alice”]

9. Подсчитайте количество слов в строке.

решение:

function countWords(str) {
         str = str.replace(/(^\s*)|(\s*$)/gi,"");
         str = str.replace(/[ ]{2,}/gi," ");
         str = str.replace(/\n /,"\n");
         return str.split(' ').length;
      }
countWords("I love JavaScript") // 3

10. Перевернуть строку

решение:

function reverseString(str) {
    return str.split("").reverse().join("");
}
reverseString("hello"); // olleh