- Что произойдёт, если установить массиву нулевую длину?
- Какими командами
git
приходилось пользоваться кромеpull
,push
,commit
- Как задать свойство объекту, которое нельзя удалить
- Самое крутое, что делали (чем гордитесь)
таймер на классах: https://codesandbox.io/s/dark-pond-764ou?file=/src/Timer.jsx
на хуках: https://codesandbox.io/s/cocky-bash-0shd4?file=/src/Timer.jsx
Каков будет результат выполнения следующего кода (здесь же рассказать про 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');
Что выведется?
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
стрелочной функцией?
Напишите функцию 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
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 });