38 lines
1.4 KiB
JavaScript
38 lines
1.4 KiB
JavaScript
// Tour of JavaScript (QuickJS ES2023) on calog: const/let, arrow functions,
|
|
// Array.map/filter, template literals, and JSON round-tripping.
|
|
// Run: bin/calog examples/scripts/languages/javascript.js
|
|
|
|
// const and let bindings.
|
|
const languageName = "JavaScript";
|
|
let engine = "QuickJS ES2023";
|
|
|
|
// An arrow function.
|
|
const square = (n) => n * n;
|
|
|
|
// Array.filter then Array.map with an arrow function.
|
|
const numbers = [1, 2, 3, 4, 5, 6, 7, 8];
|
|
const evens = numbers.filter((n) => n % 2 === 0);
|
|
const evenSquares = evens.map(square);
|
|
|
|
// Template literals.
|
|
calogPrint(`Engine: ${languageName} (${engine})`);
|
|
calogPrint(`Evens: ${evens.join(", ")}`);
|
|
calogPrint(`Even squares: ${evenSquares.join(", ")}`);
|
|
|
|
// Compute a sum with reduce to show more of the standard library.
|
|
const total = evenSquares.reduce((acc, n) => acc + n, 0);
|
|
calogPrint(`Sum of even squares: ${total}`);
|
|
|
|
// jsonParse a nested object, mutate it, then jsonStringify it back out.
|
|
const source = '{"user":{"name":"Ada","roles":["admin","dev"]},"active":true}';
|
|
const parsed = jsonParse(source);
|
|
parsed.user.roles.push("owner");
|
|
parsed.stats = { evens: evens.length, total: total };
|
|
|
|
const roundTripped = jsonStringify(parsed);
|
|
calogPrint(`User: ${parsed.user.name}`);
|
|
calogPrint(`Roles: ${parsed.user.roles.join(", ")}`);
|
|
calogPrint(`JSON: ${roundTripped}`);
|
|
|
|
// Tear down and exit cleanly (required -- calog does not auto-exit).
|
|
calogExit(0);
|