JavaScript
33K subscribers
1.14K photos
10 videos
33 files
814 links
A resourceful newsletter featuring the latest and most important news, articles, books and updates in the world of #javascript 🚀 Don't miss our Quizzes!

Let's chat: @nairihar
Download Telegram
CHALLENGE

const user = {
profile: {
settings: {
theme: 'dark',
notifications: null
}
}
};

const getNotificationSound = (user) => {
return user?.profile?.settings?.notifications?.sound ?? 'default';
};

console.log(getNotificationSound(user));
console.log(getNotificationSound(null));
console.log(getNotificationSound({ profile: {} }));
6👍6🔥3
CHALLENGE

function processData() {
try {
console.log('start');
throw new Error('oops');
console.log('unreachable');
} catch (e) {
console.log('caught');
return 'error';
} finally {
console.log('cleanup');
}
console.log('end');
}

const result = processData();
console.log(result);
🔥97👍4
CHALLENGE

const target = { name: 'Sarah', age: 25 };

const handler = {
get(obj, prop) {
if (prop === 'toString') {
return () => `Person: ${obj.name}`;
}
return Reflect.get(obj, prop);
},
set(obj, prop, value) {
if (prop === 'age' && value < 0) {
return false;
}
return Reflect.set(obj, prop, value);
}
};

const proxy = new Proxy(target, handler);
proxy.age = -5;
proxy.location = 'NYC';
console.log(proxy.toString());
console.log(proxy.age);
console.log(proxy.location);
9👍6🔥2
CHALLENGE

const obj = {
name: 'Sarah',
greet() {
console.log(`Hello, ${this.name}`);
}
};

const person = { name: 'Mike' };
const func = obj.greet;

obj.greet();
func();
func.call(person);
person.hello = obj.greet;
person.hello();
🔥7👍53
CHALLENGE

const source = { a: 1, b: { c: 2 } };
const target1 = Object.assign({}, source);
const target2 = { ...source };

source.b.c = 99;
target1.a = 10;
target2.b.c = 50;

console.log(source.a);
console.log(source.b.c);
console.log(target1.a);
console.log(target1.b.c);
console.log(target2.a);
console.log(target2.b.c);
5👍4🔥3
5👍3🔥2
✌️ Four Heavyweights Drop Updates

Four stalwarts of the JavaScript ecosystem all shipped notable releases this week, and odds are you're using at least one of them:

Gatsby v5.16 proves Gatsby, once considered neck-and-neck with Next.js in the React world, is not 'dead'. The headline feature is React 19 support.

Babel 7 just shipped its final release. "After years in the making, Babel 8 is finally ready," in release candidate form, at least.

Rspress 2.0 is a major release for the high-performance Rust-powered, but JavaScript-facing, static site generator.

Lodash 4.17.23 sounds minor, but it's a 'security reset' for the still heavily used utility library and is designed to provide a base for a longer future.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍54
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;
};
};

const fibonacci = memoize((n) => {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
});

console.log(fibonacci(10));
console.log(fibonacci(5));
console.log(fibonacci(10));
🔥84👍2
What is the output?
Anonymous Quiz
28%
89 5 89
41%
55 5 55
16%
55 5 21
15%
55 8 55
2🔥2👍1
⁉️ How Not to Parse Numbers in JavaScript

Why use a proper locale-aware API to parse numbers when you can hand-roll a maze of string splits, separator swaps, and implicit type coercions that silently break on edge cases?

Remy Porter (The Daily WTF)
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥6👍3
CHALLENGE

let counter = 0;

const increment = () => ++counter;
const getValue = () => counter;

const obj = {
get value() {
increment();
return getValue();
}
};

console.log(obj.value);
console.log(obj.value);
console.log(counter);
8🔥5👍2
What is the output?
Anonymous Quiz
23%
1 1 1
23%
2 4 4
18%
0 1 2
35%
1 2 2
2👍2🔥1
👀 Heat.js 5.0: A Flexible Heat Map Rendering Solution

Generate customized interactive heatmaps (think GitHub contributions graph), or render heatmaps as lines and bar charts. The site is packed with demos to enjoy. GitHub repo.

William Troup
Please open Telegram to view this post
VIEW IN TELEGRAM
9🔥8👍5
CHALLENGE

const target = { name: "Sarah", age: 25 };

const handler = {
get(obj, prop) {
if (prop === 'greeting') {
return `Hello, I'm ${obj.name}`;
}
return obj[prop]?.toString().toUpperCase() || 'UNKNOWN';
},

set(obj, prop, value) {
if (typeof value === 'string') {
obj[prop] = value.toLowerCase();
} else {
obj[prop] = value * 2;
}
return true;
}
};

const proxy = new Proxy(target, handler);
console.log(proxy.name);
proxy.city = "Boston";
proxy.score = 15;
console.log(proxy.greeting);
console.log(proxy.city + " " + proxy.score);
👍166🔥4
🌪 GitHub is exploring solutions to tackle low-quality contributions, which could include giving you the option to disable PRs entirely or at least restrict them to collaborators. Got opinions? Join the discussion.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍75🔥4