Skip to content

Instantly share code, notes, and snippets.

@ufocoder
Forked from AntonGorelov/js-questions.md
Last active August 1, 2019 12:20
Show Gist options
  • Save ufocoder/d6bb31ae33ca3ba8eff3d43d77324ab8 to your computer and use it in GitHub Desktop.
Save ufocoder/d6bb31ae33ca3ba8eff3d43d77324ab8 to your computer and use it in GitHub Desktop.
JS questions
  1. Что покажут эти два alert()?
var foo = 'Hello';

(function() {
  var bar = ' World';
  console.log(foo + bar);
})();

console.log(foo + bar);

Ответ: 'Hello World' и ReferenceError: bar is not defined.

  1. Что вернет следующий код?
var Employee = {
  company: 'xyz'
}
var emp1 = Object.create(Employee);

delete emp1.company

console.log(emp1.company);

Ответ: Код выше будет выводить xyz в качестве вывода. Здесь объект emp1 получил компанию в качестве прототипа. Оператор удаления не удаляет свойство прототипа.

  1. Что вернет следующий код?
var trees = ["xyz", "xxxx", "test", "ryan", "apple"];

delete trees[3];

console.log(trees.length);

Ответ: 5. delete() не влияет на длину массива.

  1. Что будет в консоли?
var number = 0;

console.log(number++);
console.log(++number);
console.log(number);

Ответ: C Постфиксный унарный оператор ++:

Возвращает значение (0) Инкрементирует значение (теперь число равно 1) Префиксный унарный оператор ++:

Инкрементирует значение (число теперь равно 2) Возвращает значение (2) Результат: 0 2 2.

  1. Что произойдет при выполнении следующего куска кода?
myname = "global"; 

function func() { 
    console.log(myname); 
    var myname = "local"; 
    console.log(myname); 
} 

func(); 

Ответ: Интерпретатор JavaScript всегда перемещает («поднимает») объявления функций и переменных в начало области видимости (вверх текущего скрипта или функции). Код в вопросе аналогичен следующему:

myname = "global";

function func() { 
  var myname; 
  console.log(myname);
  myname = "local"; 
  console.log(myname);
}

func(); 
  1. Что вернет следующие строки?
var a = !function(){}()
var b = !function(){}

console.log(a);
console.log(b);

Ответ: true, false

  1. Чему равно foo.x ?
var foo = {n: 1};
var bar = foo;

foo.x = foo = {n: 2};

console.log(foo.x);

Главное на что здесь стоит обратить внимание, так это то, что foo на которую ссылается foo.x “устанавливается” перед тем как foo изменится. foo.x ссылается на старое значение foo. Это значит, что в старом foo появиться новое свойство x равное {n: 2} . А в новое foo запишется {n: 2} .

// bar
{
  n: 1,
  x: {
    n: 2
  }
}

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

  1. Валидный код?
<figure>
   <picture>
      <source media="(min-width: 40em)"
      srcset="large.jpg 1024w, medium.jpg 640w, small.jpg 320y">
      <img src="medium.jpg" alt="London by night">
   </picture>
   <figcaption>A landscape of London by night</figcaption>
</figure>

В разметке используется тэг picture, который совсем недавно вошел в спецификацию. Код валидный вплоть до последнего изображения в атрибуте srcset; 320y — невалидное значение. Если изменить y на w, то код будет валидным полностью.

  1. Что такое атрибут longdesc?

Ответ: Этот атрибут был сделан для того, чтобы позволить более детально описывать изображения, нежели это позволяет сделать атрибут alt. Интересная вещь: вместо того, чтобы являть собой описание изображения (как это делает атрибут alt), longdesc указывает на гиперссылку, содержащую описание.

  1. 018 - 017 = ?

Ответ: 3. В JavaScript префикс 0 преобразует число в восьмеричное. Однако 8 не используется в восьмеричном виде, и любое число, содержащее 8, будет автоматически преобразовано в десятичное число. Следовательно, 018 - 017 по сути эквивалентно десятичному выражению 18 - 15, потому что 017 – восьмеричное число, а 018 – десятичное.

  1. Основное отличие стрелочных функцию

Ответ: Основное отличие стрелочных функций от обычных функций, даже если не смотреть на то, что они короче, заключается в том, что стрелочные функции не задают собственное значение для this. Вместо этого они используют значение this блока, в который они включены. В вышеприведённом примере при обращении к this.x каждую секунду будут выводиться числа 1, 2, 3, и так далее. При использовании в похожей ситуации обычной функции, this имело бы значение undefined, что привело бы к выводу NaN. Тело стрелочной функции представляет собой её возвращаемое значение. Это делает особенно удобным использование стрелочных функций в промисах. Обычные функции, в отличие от стрелочных, должны явно возвращать некое значение, иначе автоматически будет возвращено undefined.

console.log(-100 < 0 < 100);
console.log(-100 > 0 > 100);
var sexism = '👧' < '👨';

console.log(sexism)
var santaSpread = [...'🎅🏿']

console.log(santaSpread);
var obj = {
    '0': 'a',
    '1': 'b',
    '2': 'c',
    'length': 3
}

obj.__proto__ = Array.prototype

console.log(...obj)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment