Skip to content

Instantly share code, notes, and snippets.

@lbeschastny
Forked from wbarcovsky/questisons.md
Last active February 17, 2022 11:04
Show Gist options
  • Save lbeschastny/1ba679e5c4ce355b85f80f21cab22060 to your computer and use it in GitHub Desktop.
Save lbeschastny/1ba679e5c4ce355b85f80f21cab22060 to your computer and use it in GitHub Desktop.

Вопросы

  • Что произойдёт, если установить массиву нулевую длину?
  • Какими командами git приходилось пользоваться кроме pull, push, commit
  • Как задать свойство объекту, которое нельзя удалить
  • Самое крутое, что делали (чем гордитесь)

React

таймер на классах: https://codesandbox.io/s/dark-pond-764ou?file=/src/Timer.jsx

на хуках: https://codesandbox.io/s/cocky-bash-0shd4?file=/src/Timer.jsx

JS

Маленькие задачки

Каков будет результат выполнения следующего кода (здесь же рассказать про Event loop)

for (var i = 0; i < 4; i ++) {
  setTimeout(() => console.log(i), 0);
}

setTimeout(function timeout() {
    console.log('timeout');
}, 0);

let p = new Promise(function(resolve, reject) {
    console.log('create promise');
    resolve();
});

p.then(function(){
    console.log('resolve promise');
});

console.log('end script');

console.log('script start');

setTimeout(function () {
	console.log('setTimeout');

	Promise.resolve().then(function () {
		console.log('setTimeout promise');
	});
}, 0);

Promise.resolve().then(function () {
	console.log('promise');

	setTimeout(function () {
		console.log('promise setTimeout');
	}, 0);
});

console.log('script end');

Задачка №1

Что выведется?

var fullname = 'global fullname';
var obj = {
   fullname: 'obj fullname',
   prop: {
      fullname: 'prop fullname',
      getFullname: function() {
         return this.fullname;
      }
   }
};
 
console.log(obj.prop.getFullname());
 
var test = obj.prop.getFullname;
 
console.log(test());

Вопросы:

  • Как изменить это поведение?
  • Что произойдёт если сделать getFullname стрелочной функцией?

Задачка №2

Напишите функцию get, которая получает объект и путь к вложенному свойству объекта и возвращает значение этого свойства (или undefined, если свойства не существует). Третий, опциональный аргумент функции — значение по умолчанию, которое возвращается, если значения по указанному пути не существует.

function get(obj, path, defaultValue) {
// code
}

const obj = { 
  a: { 
    b: { 
      c: 'd' 
    },
    e: 'f'
  }
};

get(obj, 'a.b');   // { c : 'd' }
get(obj, 'a.b.c'); // 'd'
get(obj, 'a.e');   // 'f'
get(obj, 'a.x.e'); // undefined
get(obj, 'a.x.e', true); // true
get(obj, 'a.x.e', 'My default value'); // My default value

Вопросы от @wbarcovsky

const fizz = {...bazz, x: 1};
const {x, ...fizz} = bazz;

Q: В чем разница между этими двумя выражениями?
Простой вопрос на понимание spred-операторов, но иногда заставляет людей призадуматься


const obj1 = {
  data: {
    userId: 1,
    userName: 'Test',
    userTags: ['admin', 'vip'],
  }
};

Q: Я хочу получить копию объекта obj1, которая была бы полностью независима от оригинала
Можно также расспросить чем будет отличаться поведение при этих способах копирования и почему

const objCopy1 = Object.assign({}, obj1); const objCopy2 = {...obj1}; const objCopy3 = JSON.parse(JSON.stringify(obj1));


const config = {
    db: {
        name: 'dev',
        connection: {
            host: '127.0.0.1',
            port: 9000,
            url: function() {
                console.log(this);
            }
        }
    }
};

Q: Что мне нужно сделать, чтобы у контекста в функции url был доступ до config.db.name?


async function sleep(time: number) {
  return new Promise((resolve) => setTimeout(resolve, time));
}

async function test1() {
  await sleep(1);
  console.log('a1');

  await sleep(1);
  console.log('b1');

  await sleep(1);
  console.log('c1');
}

async function test2() {
  await sleep(1);
  console.log('a2');

  await sleep(1);
  console.log('b2');

  await sleep(1);
  console.log('c2');
}

Promise.all([test1(), test2()]);

Q: Что будет выводить этот код? Как измениться его поведение, если убрать все await-ы и почему?
На вопрос все в основном отвечают правильно, но объяснение помогает мне понять, насколько хорошо канди дат представляет себе внутренее устройство event loop-а


class Parent {
  constructor(params) {
    Object.assign(this, params);
  }

  static fabric() {
    return new Parent({ source: 'fabric', test: 1 });
  }

  title() {
    return "I'm Parent";
  }
}

class Children extends Parent {
  title() {
    return "I'm Children";
  }
}

const parent = Parent.fabric();
const children = Children.fabric();

console.log(parent.title(), children.title());

Q: Как нужно изменить метод fabric в классе Parent, чтобы Children.fabric() (и все другие наследники класса Parent) возвращал экземпляр своего класса?


const obj1 = {
  a: 1,
  b: 2,
  c: 3
};

const obj2 = {
  a: 10,
  b: null,
  c: undefined,
  d: null,
  e: undefined,
};

console.log({ ...obj1, ...obj2 });
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment