❤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
🤣3❤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}
38%
1 2 1 {"count":0}
14%
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
21%
k0,k1,k2 computed fromObj secret
45%
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
31%
undefined 10 no missing true
47%
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
🔥3❤1
A Rust port of the Go-based TypeScript 7 compiler, built with some input from the TypeScript team and heading into Oxc. Benchmarks claim up to 8x the speed of TypeScript 7.0 and it runs in WebAssembly. Experimental, but npx tsrs works.
Chen, Mitropoulos and Nakazawa (Cloudflare / VoidZero)
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍3🔥1