❤2🔥1
CHALLENGE
async function run() {
const results = await Promise.allSettled([
Promise.resolve(1),
Promise.reject('error'),
new Promise(resolve => setTimeout(() => resolve(3), 0)),
]);
console.log(results.map(r => r.value ?? r.reason).join(','));
}
run();❤3👍1
❤2
CHALLENGE
class Counter {
#count = 0;
get value() {
return this.#count;
}
set value(v) {
if (v < this.#count) throw new RangeError('Cannot decrease');
this.#count = v;
}
}
const c = new Counter();
c.value = 5;
let msg;
try {
c.value = 3;
} catch (e) {
msg = e.message;
}
c.value = 10;
console.log(msg, c.value);🔥2
What is the output?
Anonymous Quiz
20%
RangeError 10
59%
Cannot decrease 10
14%
undefined 10
7%
Cannot decrease 3
❤1👍1🤔1
CHALLENGE
const obj = { b: 1, 2: 'two', a: 3, 1: 'one' };
console.log(Object.keys(obj).join(','), Object.values(obj).join(','));🤔3
What is the output?
Anonymous Quiz
17%
1,2,a,b one,two,3,1
50%
b,2,a,1 1,two,3,one
27%
1,2,b,a one,two,1,3
6%
a,b,1,2 3,1,one,two
❤6👍1
CHALLENGE
class Counter {
static #total = 0;
#id;
constructor() {
Counter.#total++;
this.#id = Counter.#total;
}
get id() { return this.#id; }
static get total() { return Counter.#total; }
}
class Special extends Counter {
#label;
constructor(label) {
super();
this.#label = label;
}
get label() { return `${this.#label}-${this.id}`; }
}
const c1 = new Counter();
const c2 = new Special('x');
const c3 = new Special('y');
console.log(c1.id, c2.id, c3.label, Counter.total);❤1
🤣2❤1
CHALLENGE
const source = {
count: 0,
get value() {
this.count++;
return this.count;
}
};
const { value, ...rest } = source;
const spread = { ...source };
console.log(value, spread.value, source.count, JSON.stringify(rest));What is the output?
Anonymous Quiz
35%
1 2 2 {"count":1}
39%
1 2 1 {"count":0}
13%
2 2 2 {"count":2}
13%
1 1 1 {"count":1}
❤2🔥1🤣1
CHALLENGE
const compose = (...fns) => x => fns.reduceRight((acc, fn) => fn(acc), x);
const pipe = (...fns) => x => fns.reduce((acc, fn) => fn(acc), x);
const addOne = x => x + 1;
const double = x => x * 2;
const square = x => x * x;
console.log(compose(square, double, addOne)(3), pipe(square, double, addOne)(3));
🤩1
CHALLENGE
let i = 0;
const key = () => `k${i++}`;
const obj = { [key()]: 1, [key()]: 2, [key()]: 3 };
const sym = Symbol('x');
const keyObj = { toString() { return 'dyn'; } };
const obj2 = {
[sym]: 'secret',
[`a${1 + 1}`]: 'computed',
['a' + 2]: 'overwritten',
[keyObj]: 'fromObj'
};
console.log(`${Object.keys(obj).join(',')} ${obj2.a2} ${obj2.dyn} ${obj2[sym]}`);
👍3❤1
What is the output?
Anonymous Quiz
22%
k0,k1,k2 computed fromObj secret
44%
k1,k2,k3 overwritten fromObj secret
23%
k0,k1,k2 overwritten dyn secret
11%
k0,k1,k2 overwritten fromObj secret
👍3
CHALLENGE
const memoize = (fn) => {
const cache = new Map();
return (...args) => {
const key = JSON.stringify(args);
if (cache.has(key)) return cache.get(key);
const result = fn(...args);
cache.set(key, result);
return result;
};
};
let calls = 0;
const square = memoize((x) => {
calls++;
return x * x;
});
console.log(square(4), square(4), square(-4), calls);❤2
❤2
CHALLENGE
const handler = {
get(target, prop, receiver) {
if (!(prop in target)) {
return `no ${String(prop)}`;
}
return Reflect.get(target, prop, receiver);
},
set(target, prop, value) {
if (typeof value === 'number' && value < 0) {
throw new RangeError('negative');
}
return Reflect.set(target, prop, value);
}
};
const obj = new Proxy({ a: 1, b: 2 }, handler);
obj.c = 10;
console.log(obj.a, obj.c, obj.missing, obj.hasOwnProperty('a'));❤2🔥2👍1
What is the output?
Anonymous Quiz
16%
1 10 no missing false
32%
undefined 10 no missing true
46%
1 10 no missing true
6%
1 10 undefined true
🔥5
CHALLENGE
let counter = 0;
const state = {
get value() {
counter++;
return counter % 3 === 0 ? null : counter;
}
};
let result;
result ??= state.value;
result ??= state.value;
result ??= state.value;
result ??= state.value;
console.log(result, counter);
❤1