Javascript fondamentaux
Thème :
Intermédiaire
1 vues ·17/19 leçons

BOM, Méthodes Tableaux et Chaînes de Caractères (2025-2026)


1️ Le BOM (Browser Object Model) - Interagir avec le Navigateur

Qu’est-ce que le BOM ?

Le BOM permet d’interagir avec le navigateur (pas avec le HTML). C’est tout ce qui est en dehors du document : fenêtre, historique, URL, écran…

Structure du BOM

window (racine de tout)
├── document (DOM - structure HTML)
├── navigator (infos du navigateur)
├── location (URL actuelle)
├── history (historique de navigation)
├── screen (infos de l'écran)
├── alert() / confirm() / prompt()
├── setTimeout() / setInterval()
└── open() / close()

2️⃣ L’objet WINDOW

Qu’est-ce que window ?

window est l’objet racine du BOM. Tout ce qui existe dans le navigateur en est une propriété.

// window est l'objet global
console.log(window.innerWidth); // Largeur de la fenêtre
console.log(window.innerHeight); // Hauteur de la fenêtre

// Ces deux sont équivalents
window.alert('Bonjour');
alert('Bonjour');

Propriétés principales de window

// Dimensions de la fenêtre
console.log(window.innerWidth); // Largeur visible (sans barre de défilement)
console.log(window.innerHeight); // Hauteur visible

// Dimensions de l'écran
console.log(window.outerWidth); // Largeur totale (avec barre de défilement)
console.log(window.outerHeight); // Hauteur totale

// Position de la fenêtre
console.log(window.screenX); // Position X
console.log(window.screenY); // Position Y

// Scroll
console.log(window.scrollX); // Défilement horizontal
console.log(window.scrollY); // Défilement vertical

3️⃣ L’objet NAVIGATOR - Infos du Navigateur

Qu’est-ce que navigator ?

navigator donne des informations sur le navigateur et l’appareil de l’utilisateur.

Propriétés principales

// Langue de l'utilisateur
console.log(navigator.language); // "fr-FR"

// Identifiant du navigateur
console.log(navigator.userAgent); // Chaîne complète du navigateur
// "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36..."

// Connexion internet
console.log(navigator.onLine); // true ou false

// Plateforme
console.log(navigator.platform); // "Win32", "MacIntel", etc.

// Nombre de processeurs
console.log(navigator.hardwareConcurrency); // 8 (exemple)

// Mémoire disponible
console.log(navigator.deviceMemory); // 8 (Go)

Exemples pratiques

Exemple 1 : Vérifier la connexion internet

if (navigator.onLine) {
    console.log('Connecté à internet');
} else {
    console.log('Pas de connexion');
}

// Écouter les changements de connexion
window.addEventListener('online', () => {
    console.log('Connexion rétablie');
});

window.addEventListener('offline', () => {
    console.log('Connexion perdue');
});

Exemple 2 : Détecter le navigateur

const userAgent = navigator.userAgent;

if (userAgent.includes('Chrome')) {
    console.log('Utilisateur Chrome');
} else if (userAgent.includes('Firefox')) {
    console.log('Utilisateur Firefox');
} else if (userAgent.includes('Safari')) {
    console.log('Utilisateur Safari');
}

Exemple 3 : Adapter le contenu à la langue

const langue = navigator.language.split('-')[0]; // "fr" ou "en"

if (langue === 'fr') {
    console.log('Bienvenue en français');
} else if (langue === 'en') {
    console.log('Welcome in English');
}

4️⃣ L’objet LOCATION - Gérer l’URL

Qu’est-ce que location ?

location donne accès à l’URL actuelle et permet de la modifier.

📊 Structure d’une URL

https://www.example.com:8080/path/page.html?search=test#section

location.protocol   // "https:"
location.hostname   // "www.example.com"
location.port       // "8080"
location.pathname   // "/path/page.html"
location.search     // "?search=test"
location.hash       // "#section"
location.href       // URL complète

Propriétés et méthodes

// Lire l'URL actuelle
console.log(location.href); // URL complète
console.log(location.hostname); // Nom de domaine
console.log(location.pathname); // Chemin
console.log(location.search); // Paramètres (?...)
console.log(location.hash); // Ancre (#...)

// Modifier l'URL (redirection)
location.href = 'https://google.com'; // Rediriger
location.replace('https://google.com'); // Rediriger (pas d'historique)

// Recharger la page
location.reload(); // Recharge normale
location.reload(true); // Recharge sans cache

Exemples pratiques

Exemple 1 : Extraire les paramètres d’URL

// URL: https://example.com?nom=Eva&age=25

const params = new URLSearchParams(location.search);
console.log(params.get('nom')); // "Eva"
console.log(params.get('age')); // "25"

Exemple 2 : Rediriger selon une condition

const utilisateur = localStorage.getItem('utilisateur');

if (!utilisateur) {
    location.href = '/login'; // Rediriger vers login
}

Exemple 3 : Lire l’ancre (hash)

// URL: https://example.com#section-contact

const section = location.hash.slice(1); // "section-contact"
console.log(section);

// Scroller vers la section
document.getElementById(section)?.scrollIntoView();

5️⃣ L’objet HISTORY - Naviguer dans l’Historique

Qu’est-ce que history ?

history permet de naviguer dans l’historique du navigateur (boutons précédent/suivant).

Méthodes principales

// Revenir à la page précédente (bouton retour)
history.back();

// Aller à la page suivante (bouton suivant)
history.forward();

// Aller à une page spécifique
history.go(-1); // Revenir 1 page
history.go(1); // Avancer 1 page
history.go(-2); // Revenir 2 pages

// Nombre de pages dans l'historique
console.log(history.length);

Exemples pratiques

// Bouton "Retour"
document.querySelector('.btn-back').addEventListener('click', () => {
    history.back();
});

// Bouton "Suivant"
document.querySelector('.btn-next').addEventListener('click', () => {
    history.forward();
});

// Vérifier s'il y a un historique
if (history.length > 1) {
    console.log("L'utilisateur peut revenir");
}

6️⃣ L’objet SCREEN - Infos de l’Écran

Qu’est-ce que screen ?

screen donne des informations sur l’écran physique de l’utilisateur.

Propriétés principales

// Dimensions totales de l'écran
console.log(screen.width); // 1920 (px)
console.log(screen.height); // 1080 (px)

// Dimensions disponibles (sans barre des tâches)
console.log(screen.availWidth); // 1920
console.log(screen.availHeight); // 1040

// Profondeur de couleur
console.log(screen.colorDepth); // 24 (bits)

// Orientation
console.log(screen.orientation.type); // "landscape-primary"

Exemple pratique

// Adapter le layout à l'écran
if (screen.width < 768) {
    console.log('Petit écran (mobile)');
} else if (screen.width < 1024) {
    console.log('Écran moyen (tablette)');
} else {
    console.log('Grand écran (desktop)');
}

7️⃣ Dialogues - alert(), confirm(), prompt()

Afficher des messages à l’utilisateur

// Alert : afficher un message
alert('Bienvenue !');

// Confirm : demander une confirmation (true/false)
const reponse = confirm('Êtes-vous sûr ?');
if (reponse) {
    console.log('Utilisateur a cliqué OK');
} else {
    console.log('Utilisateur a cliqué Annuler');
}

// Prompt : demander une entrée
const nom = prompt('Quel est votre nom ?');
if (nom) {
    console.log('Bonjour ' + nom);
} else {
    console.log('Utilisateur a annulé');
}

8️⃣ Temporisation - setTimeout() et setInterval()

Exécuter du code après un délai

// setTimeout : exécuter une fois après un délai
setTimeout(() => {
    console.log('Message après 3 secondes');
}, 3000);

// setInterval : exécuter régulièrement
const intervalId = setInterval(() => {
    console.log('Message toutes les 2 secondes');
}, 2000);

// Arrêter l'intervalle
clearInterval(intervalId);

Exemple : Minuteur

let secondes = 10;

const minuteur = setInterval(() => {
    console.log(`Temps restant: ${secondes}s`);
    secondes--;

    if (secondes < 0) {
        clearInterval(minuteur);
        console.log('Temps écoulé !');
    }
}, 1000);

9️⃣ Fenêtres - open() et close()

Ouvrir/fermer des fenêtres

// Ouvrir une nouvelle fenêtre
const nouvelleFenetre = window.open('https://google.com', '_blank');

// Fermer la fenêtre
nouvelleFenetre.close();

// Ouvrir dans le même onglet
window.open('https://google.com', '_self');

// Ouvrir avec des options
window.open('https://google.com', 'popup', 'width=500,height=400,left=100,top=100');

📝 Projet : Générateur de Bulles Interactif

Objectif

Créer une animation où des bulles apparaissent et disparaissent. L’utilisateur clique sur les bulles pour augmenter un compteur.

📝 Code complet

<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Générateur de Bulles</title>
        <style>
            body {
                overflow: hidden;
                min-height: 100vh;
                cursor: crosshair;
                margin: 0;
                display: flex;
                justify-content: center;
                align-items: center;
                background-color: #fff;
            }

            h3 {
                font-size: 10rem;
                text-align: center;
                margin-top: 20px;
                color: rgba(128, 128, 128, 0.555);
                position: fixed;
                top: 50%;
                left: 50%;
                transform: translate(-50%, -50%);
                z-index: -1;
            }

            .bubble {
                position: absolute;
                border-radius: 50%;
                background: rgba(255, 166, 0, 0.6);
                opacity: 0;
                animation: anim 8s forwards;
                filter: hue-rotate(0deg);
                cursor: pointer;
            }

            @keyframes anim {
                to {
                    top: -250px;
                    left: var(--left);
                    opacity: 1;
                    filter: hue-rotate(720deg);
                }
            }
        </style>
    </head>
    <body>
        <h3>0</h3>

        <script>
            // Sélectionner le compteur
            const counterDisplay = document.querySelector('h3');
            let counter = 0;

            // Fonction pour créer une bulle
            const bubbleMaker = () => {
                // Créer l'élément bulle
                const bubble = document.createElement('span');
                bubble.classList.add('bubble');
                document.body.appendChild(bubble);

                // Taille aléatoire (100px à 200px)
                const size = `${Math.random() * 100 + 100}px`;
                bubble.style.height = size;
                bubble.style.width = size;

                // Position aléatoire
                bubble.style.top = `${Math.random() * 100 + 50}%`;
                bubble.style.left = `${Math.random() * 100}%`;

                // Direction aléatoire (gauche ou droite)
                const plusMinus = Math.random() > 0.5 ? 1 : -1;
                bubble.style.setProperty('--left', `${Math.random() * 100 * plusMinus}%`);

                // Clic sur la bulle
                bubble.addEventListener('click', () => {
                    counter++;
                    counterDisplay.textContent = counter;
                    bubble.remove();
                });

                // Supprimer la bulle après 8 secondes
                setTimeout(() => {
                    bubble.remove();
                }, 8000);
            };

            // Créer une bulle toutes les secondes
            setInterval(bubbleMaker, 1000);
        </script>
    </body>
</html>

🔍 Explication du code

1. Sélection du compteur

const counterDisplay = document.querySelector('h3');
let counter = 0;
  • Récupère l’élément <h3> pour afficher le compteur
  • Initialise le compteur à 0

2. Création d’une bulle

const bubble = document.createElement('span');
bubble.classList.add('bubble');
document.body.appendChild(bubble);
  • Crée un élément <span>
  • Ajoute la classe CSS bubble
  • L’ajoute au DOM

3. Taille et position aléatoires

const size = `${Math.random() * 100 + 100}px`; // 100-200px
bubble.style.top = `${Math.random() * 100 + 50}%`;
bubble.style.left = `${Math.random() * 100}%`;

4. Animation avec variable CSS

const plusMinus = Math.random() > 0.5 ? 1 : -1;
bubble.style.setProperty('--left', `${Math.random() * 100 * plusMinus}%`);
  • Définit la direction finale (gauche ou droite)

5. Gestion du clic

bubble.addEventListener('click', () => {
    counter++;
    counterDisplay.textContent = counter;
    bubble.remove();
});

6. Suppression automatique

setTimeout(() => {
    bubble.remove();
}, 8000);

🔟 Méthodes des Tableaux

📊 Tableau récapitulatif

Méthode Utilité Modifie ?
push() Ajouter à la fin ✅ Oui
pop() Supprimer la fin ✅ Oui
shift() Supprimer le début ✅ Oui
unshift() Ajouter au début ✅ Oui
slice() Extraire une partie ❌ Non
splice() Ajouter/supprimer ✅ Oui
concat() Fusionner ❌ Non
join() Convertir en chaîne ❌ Non
reverse() Inverser ✅ Oui
sort() Trier ✅ Oui
map() Transformer ❌ Non
filter() Sélectionner ❌ Non
reduce() Agréger ❌ Non
find() Trouver un élément ❌ Non
indexOf() Position d’un élément ❌ Non
includes() Contient ? ❌ Non

Exemples pratiques

push() et pop()

const fruits = ['pomme', 'banane'];
fruits.push('orange'); // ['pomme', 'banane', 'orange']
const dernier = fruits.pop(); // 'orange'

shift() et unshift()

const fruits = ['pomme', 'banane', 'orange'];
const premier = fruits.shift(); // 'pomme'
fruits.unshift('raisin'); // ['raisin', 'banane', 'orange']

slice() vs splice()

const fruits = ['pomme', 'banane', 'orange', 'raisin'];

// slice : extrait sans modifier
const partie = fruits.slice(1, 3); // ['banane', 'orange']
console.log(fruits); // Inchangé

// splice : modifie le tableau
fruits.splice(1, 2, 'kiwi'); // Remplace 2 éléments par 'kiwi'
console.log(fruits); // ['pomme', 'kiwi', 'raisin']

join()

const fruits = ['pomme', 'banane', 'orange'];
const texte = fruits.join(', '); // "pomme, banane, orange"

sort()

const nombres = [3, 1, 4, 1, 5, 9];
nombres.sort((a, b) => a - b); // [1, 1, 3, 4, 5, 9]

1️⃣1️⃣ Méthodes des Chaînes de Caractères

📊 Tableau récapitulatif

Méthode Utilité
length Longueur
charAt() Caractère à une position
charCodeAt() Code du caractère
indexOf() Position d’une sous-chaîne
slice() Extraire une partie
substring() Extraire (sans négatif)
toLowerCase() Convertir en minuscules
toUpperCase() Convertir en majuscules
trim() Supprimer les espaces
split() Convertir en tableau
replace() Remplacer
includes() Contient ?
startsWith() Commence par ?
endsWith() Finit par ?
repeat() Répéter
padStart() Ajouter au début
padEnd() Ajouter à la fin

Exemples pratiques

const texte = 'Bonjour JavaScript';

// Longueur
console.log(texte.length); // 18

// Caractère à une position
console.log(texte.charAt(0)); // "B"

// Convertir la casse
console.log(texte.toLowerCase()); // "bonjour javascript"
console.log(texte.toUpperCase()); // "BONJOUR JAVASCRIPT"

// Supprimer les espaces
const avecEspaces = '  Bonjour  ';
console.log(avecEspaces.trim()); // "Bonjour"

// Diviser en tableau
const mots = texte.split(' '); // ["Bonjour", "JavaScript"]

// Remplacer
console.log(texte.replace('JavaScript', 'JS')); // "Bonjour JS"

// Vérifier
console.log(texte.includes('Java')); // true
console.log(texte.startsWith('Bon')); // true
console.log(texte.endsWith('Script')); // true

// Répéter
console.log('Ha'.repeat(3)); // "HaHaHa"

// Ajouter au début
const numero = '42';
console.log(numero.padStart(5, '0')); // "00042"

Résumé des points clés

✅ window = Objet racine du BOM ✅ navigator = Infos du navigateur ✅ location = Gestion de l’URL ✅ history = Historique de navigation ✅ screen = Infos de l’écran ✅ setTimeout/setInterval = Temporisation ✅ alert/confirm/prompt = Dialogues ✅ Tableaux = push, pop, map, filter, reduce ✅ Chaînes = split, replace, includes, toUpperCase

Prêt à passer à la suite ?

Vous avez terminé cette leçon sur BOM, Méthodes Tableaux et Chaînes de Caractères (2025-2026). Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.