JavaScript — 4 bases utiles (claires et pratiques)
1) Opérateur ternaire
Syntaxe : condition ? valeurSiVrai : valeurSiFaux
Le ternaire sert à produire une valeur selon une condition.
const age = 19;
const canVote = age >= 18 ? "✅ Yes" : "❌ No"; // "✅ Yes"
// ✅ Concis et lisible
const label = count > 0 ? `${count} items` : "Empty";
// ✅ JSX
// {isLoading ? <Spinner /> : <Button>Submit</Button>}
À éviter
- Les ternaires imbriqués (illisibles) : préfère un
if/elseclair. - Les effets de bord dans les branches (garder des expressions simples).
// ❌ Trop dense → préfère un if/else
const label = c1 ? (c2 ? "A" : "B") : (c3 ? "C" : "D");
Par rapport à || et ??
a || brenvoiebsiaest falsy (0,"",null,undefined,false,NaN).a ?? bne prendbque siaestnullouundefined.- Le ternaire est toujours explicite.
const n = 0;
n || 42 // 42 (0 est falsy)
n ?? 42 // 0 (0 n'est pas null/undefined)
n >= 1 ? "ok" : "ko" // "ko"
2) Déstructuration (destructuring)
La déstructuration sort des valeurs d’un objet/array dans des variables.
Bénéfices : code plus court, plus lisible, plus ciblé.
Objets
const favouriteFilm = {
title: "Top Gun",
year: 1986,
genre: "action",
star: "Tom Cruise",
director: "Tony Scott"
};
// Extraction simple
const { title, year, genre, star, director } = favouriteFilm;
// Renommage + valeur par défaut
const { title: name, rating = 7.2 } = favouriteFilm;
// name -> "Top Gun", rating -> 7.2 (si 'rating' n'existe pas)
// Rest operator: le "reste" des propriétés
const { title: t, ...rest } = favouriteFilm;
// rest -> { year: 1986, genre: "action", star: "Tom Cruise", director: "Tony Scott" }
function printFilm({ title, year, director }) {
console.log(`${title} (${year}) — ${director}`);
}
printFilm(favouriteFilm);
Tableaux
const rgb = [255, 140, 0];
const [r, g, b] = rgb; // 255, 140, 0
const [first, , third] = [1, 2, 3]; // sauter des éléments
// Valeurs par défaut
const [x = 10, y = 20] = []; // x=10, y=20
// Swap sans variable temporaire
let a = 1, b2 = 2;
[a, b2] = [b2, a]; // a=2, b2=1
// Rest
const [head, ...tail] = [1, 2, 3, 4]; // head=1, tail=[2,3,4]
3) setTimeout — exécuter plus tard (une seule fois)
But : exécuter une fonction plus tard (au minimum après le délai).
Signature : const id = setTimeout(fn, delayMs, ...args)
console.log("What is the capital of Peru?");
setTimeout(() => console.log("Lima!"), 3000);
console.log("Ready for next question?");
Pourquoi « au minimum » ?
Le callback passe par la file d'attente de l’Event Loop :
si la pile est occupée, l’exécution réelle peut être un peu plus tard que le délai indiqué.
Passer des arguments & annuler
function displayTrafficLight(light) {
console.log(light);
}
const timerId = setTimeout(displayTrafficLight, 3000, "🟢");
displayTrafficLight("🔴"); // s'affiche tout de suite
// Pour annuler :
// clearTimeout(timerId);
Debounce (anti-mitraille clavier / scroll)
- Écrire un utilitaire générique
function debounce(fn, wait = 300) { let timeout; return function(...args) { clearTimeout(timeout); timeout = setTimeout(() => fn.apply(this, args), wait); }; } - L'utiliser sur un champ de recherche
const onSearch = debounce((q) => console.log("🔎", q), 400); input.addEventListener("input", (e) => onSearch(e.target.value));
4) setInterval — exécuter régulièrement
But : exécuter une fonction à intervalle régulier.
Signature : const id = setInterval(fn, delayMs, ...args)
function startCountdown(device) {
let secondsRemaining = 3;
const shutdownTimer = setInterval(function () {
if (secondsRemaining > 0) {
console.log(`Your ${device} will shut down in ${secondsRemaining} seconds`);
secondsRemaining--;
} else {
console.log(`Your ${device} is shutting down`);
clearInterval(shutdownTimer);
}
}, 1000, device);
}
startCountdown("MacBook");
Limiter la dérive (drift)
setInterval peut dériver si le travail à exécuter est long.
Solution : un intervalle “auto-planifié” avec setTimeout calé à l’horloge.
function preciseInterval(fn, everyMs) {
let cancelled = false;
let next = performance.now();
function tick() {
if (cancelled) return;
const now = performance.now();
next += everyMs;
fn(now);
setTimeout(tick, Math.max(0, next - performance.now()));
}
setTimeout(tick, 0);
return () => { cancelled = true; };
}
// Usage
const cancel = preciseInterval(() => {
// travail périodique
}, 1000); // toutes les secondes
// cancel() pour arrêter
À retenir
- Ternaire : parfait pour retourner une valeur selon une condition. Évite l’imbrication.
- Déstructuration : objets/arrays plus lisibles ; renommer, valeurs par défaut, opérateur rest.
setTimeout: une seule exécution,clearTimeoutpour annuler ; idéal pour le debounce.setInterval: exécution répétée,clearIntervalpour annuler ; pour la précision, préfère une bouclesetTimeoutcalée à l’horloge.