TGViewer
Channel Public Channel
JavaScript

JavaScript

@javascript

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
Subscribers
31.1K
Photos
1.2K
Videos
10
Links
895

Showing posts older than #3085 · Back to latest

Older Posts 20 shown
Post #3084 2.62K
  • ❤ 5
  • 👍 1
Post #3083 2.71K
CHALLENGE

class EventEmitter {
#listeners = new WeakMap();
#registry = new FinalizationRegistry((label) => {
console.log(`Cleaned up: ${label}`);
});

subscribe(target, callback) {
if (!this.#listeners.has(target)) {
this.#listeners.set(target, []);
}
this.#listeners.get(target).push(callback);
this.#registry.register(target, target.name ?? "unknown");
}

emit(target) {
const cbs = this.#listeners.get(target);
if (cbs) cbs.forEach(cb => cb());
}
}

const emitter = new EventEmitter();
let obj1 = { name: "sensor" };
let obj2 = { name: "timer" };

const ws = new WeakSet([obj1, obj2]);

emitter.subscribe(obj1, () => console.log("sensor fired"));
emitter.subscribe(obj2, () => console.log("timer fired"));
emitter.subscribe(obj1, () => console.log("sensor logged"));

emitter.emit(obj1);

console.log(ws.has(obj1));
obj1 = null;
console.log(ws.has({ name: "sensor" }));
  • ❤ 3
  • 👍 2
  • 🔥 2
Post #3081 2.82K
  • ❤ 5
  • 👍 2
  • 🔥 2
Post #3080 2.95K
CHALLENGE


function Vehicle(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
this.describe = function () {
return `${this.year} ${this.make} ${this.model}`;
};
}

Vehicle.prototype.age = function (currentYear) {
return currentYear - this.year;
};

const car = new Vehicle("Toyota", "Supra", 1998);
const bike = new Vehicle("Harley", "Sportster", 2005);

console.log(car.describe());
console.log(bike.age(2025));
console.log(car.constructor === Vehicle);
console.log(Object.getPrototypeOf(car) === Vehicle.prototype);
  • 👍 5
  • 🔥 3
Post #3079 2.43K
📈 In The 49MB Web Page, Shubham Bose expresses surprise at finding that loading a single NY Times page results in 422 network requests and 49 megabytes of data transferred. He reflects on the problems that have led to this being a common experience on news sites.
  • 🤣 5
  • 🔥 4
  • ❤ 2
  • 👍 2
  • 🤔 1
Post #3078 2.82K
  • ❤ 3
  • 👍 1
  • 🔥 1
Post #3077 2.76K
CHALLENGE


const p1 = new Promise((resolve) => {
console.log("A");
resolve("B");
});

const p2 = p1.then((val) => {
console.log(val);
return "C";
});

p2.then((val) => {
console.log(val);
});

console.log("D");
  • 👍 5
  • 🔥 3
  • ❤ 2
Post #3076 2.6K
✌️ Temporal: The 9-Year Journey to Fix Time in JavaScript

JavaScript’s date/time handling is notoriously messy and libraries like Moment.js became popular as a way to work around it. In 2017, Maggie Johnson-Pint, a maintainer of Moment.js, proposed the Temporal API to fix date/time handling for good, and we’re mostly there (support is growing, with Safari and Node to catch up).

Jason Williams (Bloomberg)
  • ❤ 6
  • 👍 3
Post #3074 2.46K
  • ❤ 4
  • 🔥 2
Post #3073 2.66K
CHALLENGE



class AppError extends Error {
constructor(message, statusCode) {
super(message);
this.name = this.constructor.name;
this.statusCode = statusCode;
}
}

class ValidationError extends AppError {
constructor(message) {
super(message, 400);
this.fields = [];
}
}

function riskyOperation(value) {
if (value === null) throw new ValidationError("Null value");
if (value < 0) throw new AppError("Negative value", 422);
return value * 2;
}

const results = [];

for (const val of [10, null, -5, 3]) {
try {
results.push(riskyOperation(val));
} catch (e) {
if (e instanceof ValidationError) {
results.push(`Validation:${e.statusCode}`);
} else if (e instanceof AppError) {
results.push(`App:${e.statusCode}`);
} else {
results.push("Unknown");
}
}
}

console.log(results.join(" | "));
  • 👍 5
  • 🔥 2
  • 🤩 2
Post #3072 2.65K
  • ❤ 6
  • 👍 5
  • 🔥 1
  • 🤔 1
Post #3071 2.71K
CHALLENGE


const p1 = new Promise((resolve) => {
console.log("A");
resolve("X");
});

const p2 = p1.then((val) => {
console.log("B");
return val + "Y";
});

const p3 = p2.then((val) => {
console.log("C:", val);
});

console.log("D");
  • ❤ 3
  • 👍 3
  • 🔥 2
Post #3069 3K
CHALLENGE

"use strict";

function createCounter() {
let count = 0;

return {
increment() { count++; },
decrement() { count--; },
getCount() { return count; },
reset: () => { count = 0; }
};
}

const counter = createCounter();
counter.increment();
counter.increment();
counter.increment();
counter.decrement();

const { getCount, reset } = counter;

console.log(getCount());
reset();
console.log(counter.getCount());
  • 🔥 11
  • ❤ 3
  • 👍 1
Post #3067 2.8K
  • ❤ 2
  • 👍 2
  • 🤔 1
Post #3066 2.93K
CHALLENGE


const person = { name: "Carlos", scores: [10, 20, 30] };
const clone = { ...person };

clone.name = "Diana";
clone.scores.push(40);

const snapshot = Object.assign({}, person);
snapshot.name = "Elena";
snapshot.scores.push(50);

console.log(person.name);
console.log(person.scores.length);
console.log(clone.name);
console.log(clone.scores === person.scores);
  • 👍 3
  • 🔥 3
  • ❤ 2
Post #3065 2.81K
  • ❤ 3
  • 🔥 2
Post #3064 2.86K
CHALLENGE


const str = "JavaScript is Awesome!";

const result = str
.split(" ")
.map((word, i) => {
if (i % 2 === 0) return word.toUpperCase();
return word.toLowerCase();
})
.map((word) => [...word].reverse().join(""))
.join("-");

console.log(result);
  • ❤ 12
  • 👍 4
  • 🔥 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →