loader image

La boite à ITees

Illustration d'un cube jaune lumineux flottant dans le ciel avec les lettres "JS" en bleu sur ses faces. Au sol, du code JavaScript est visible, et des formes flottent autour du cube.

Tutoriels JavaScript

La boite à ITees > Tutoriels > Tutoriels JavaScript

Tutoriel JavaScript

Illustration d'un robot humanoïde très mécanique, avec des câbles et tuyaux sortant de son corps. Il est doré avec un visage bleu. Un cube jaune lumineux avec les lettres "JS" en bleu sur les faces sort d'un emplacement rectangulaire dans sa poitrine. En transparence, du code JavaScript est visible au premier plan.

les Bases

Les Variables :

    • Les variables en JavaScript sont utilisées pour stocker des données. Elles peuvent être déclarées avec var, let, ou const.
var age = 25;

let name = "Alice";

const pi = 3.14159;
    • var : Déclare une variable avec une portée de fonction (obsolète et à éviter).
    • let : Déclare une variable avec une portée de bloc.
    • const : Déclare une constante dont la valeur ne peut pas être modifiée.

 

Les Fonctions : 

 

    • Les fonctions en JavaScript permettent d’exécuter des blocs de code réutilisables. Elles peuvent être nommées librement.
function greet(name) {
    return `Bonjour, ${name}!`;
}

console.log(greet("Alice"));

const greetArrow = (name) => `Bonjour, ${name}!`;
console.log(greetArrow("Bob"));
    • function : Utilisé pour déclarer une fonction nommée.
    • const greetArrow = (name) => { ... } : Syntaxe plus concise pour déclarer des fonctions avec l’opérateur fléché.

 

Les Conditions : 

 

    • Les conditions permettent de contrôler le flux d’exécution en fonction de certaines conditions.
let age = 18;

if (age >= 18) {
    console.log("Vous êtes majeur.");
} else {
    console.log("Vous êtes mineur.");
}
    • if : Vérifie si la condition est vraie.
    • else : Exécute le bloc de code si la condition dans if est fausse.

 

Les Boucles

 

Les boucles sont des structures de contrôle qui permettent de répéter un bloc de code plusieurs fois. JavaScript offre plusieurs types de boucles, les plus couramment utilisées étant for et while.

 

    • Liste des boucles disponibles en JavaScript :
      • for
      • while
      • do...while
      • for...in
      • for...of

 

La Boucle for

 

La boucle for est souvent utilisée lorsqu’on sait à l’avance combien de fois on veut répéter un bloc de code. Elle est particulièrement utile pour itérer sur des séquences numériques ou des tableaux.

 

      • initialisation : Une expression exécutée une fois au début de la boucle. Elle initialise une ou plusieurs variables de boucle.
      • condition : Une expression évaluée avant chaque itération de la boucle. Si la condition est vraie, le bloc de code est exécuté. Si elle est fausse, la boucle s’arrête.
      • incrémentation : Une expression exécutée à la fin de chaque itération. Elle est souvent utilisée pour mettre à jour la variable de boucle.
for (initialisation; condition; incrémentation) {
    // Code à exécuter à chaque itération
}

for (let i = 0; i < 5; i++) {
    console.log(i);
}
    • initialisation : let i = 0 initialise la variable i à 0.
    • condition : i < 5 vérifie si i est inférieur à 5.
    • incrémentation : i++ augmente la valeur de i de 1 à chaque itération.

 

La boucle va afficher les valeurs de 0 à 4 dans la console.

 

La Boucle while

 

La boucle while répète un bloc de code tant qu’une condition spécifiée est vraie. Elle est utile lorsque le nombre d’itérations n’est pas connu à l’avance et dépend de la condition.

 

    • condition : Une expression évaluée avant chaque itération. Si la condition est vraie, le bloc de code est exécuté. Si elle est fausse, la boucle s’arrête.
while (condition) {
    // Code à exécuter tant que la condition est vraie
}

let count = 0;
while (count < 5) {
    console.log(count);
    count++;
}
    • La variable count est initialisée à 0.
    • La boucle continue tant que count est inférieur à 5.
    • count++ augmente la valeur de count de 1 à chaque itération.

 

La boucle va afficher les valeurs de 0 à 4 dans la console.

 

La Boucle do...while

 

La boucle do...while est similaire à la boucle while, mais la condition est évaluée après chaque itération. Cela garantit que le bloc de code est exécuté au moins une fois.

do {
    // Code à exécuter
} while (condition);

let count = 0;
do {
    console.log(count);
    count++;
} while (count < 5);
    • Dans cet exemple, count est initialisé à 0, et le bloc de code est exécuté une fois avant que la condition count < 5 soit vérifiée.

 

La Boucle  for...in

 

La boucle for...in est utilisée pour itérer sur les propriétés énumérables d’un objet ou les indices d’un tableau.

 

Exemple avec un objet

const person = {name: "Alice", age: 25, city: "Paris"};
for (let key in person) {
    console.log(key + ": " + person[key]);
}
    • L’objet person contient trois propriétés : name, age, et city.
    • La boucle itère sur chaque propriété de l’objet person et affiche ses clés et valeurs.
    • À chaque itération, la variable key prend la valeur d’une des propriétés de l’objet.
    • console.log(key + ": " + person[key]) : Cette ligne affiche la clé actuelle suivie de sa valeur correspondante dans l’objet person.
    • Par exemple, lors de la première itération, key sera "name" et person[key] sera "Alice". Le message affiché sera donc "name: Alice".

 

Exemple avec un tableau

const colors = ["red", "green", "blue"];
for (let index in colors) {
    console.log(index + ": " + colors[index]);
}
    • Le tableau colors contient trois éléments : "red", "green", et "blue".
    • La boucle itère sur tous les indices du tableau colors.
    • À chaque itération, la variable index prend la valeur de l’indice d’un élément du tableau.
    • console.log(index + ": " + colors[index]) : Cette ligne affiche l’indice actuel suivi de la valeur correspondante dans le tableau colors.
    • Par exemple, lors de la première itération, index sera 0 et colors[index] sera "red". Le message affiché sera donc "0: red".

 

La Boucle for...of

 

La boucle for...of est utilisée pour itérer directement sur les valeurs des objets itérables. Les objets itérables incluent les tableaux, les chaînes de caractères, les ensembles (Set), les cartes (Map), et d’autres structures de données similaires.

for (let variable of iterable) {
    // Code à exécuter pour chaque valeur
}
    • variable : Une variable qui prendra successivement les valeurs de l’objet itérable à chaque itération.
    • iterable : Un objet itérable dont vous souhaitez parcourir les valeurs (par exemple, un tableau ou une chaîne de caractères).

 

Exemple avec un tableau

const colors = ["red", "green", "blue"];
for (let color of colors) {
    console.log(color);
}
    • Le tableau colors contient trois éléments : "red", "green", et "blue".
    • La boucle itère directement sur les valeurs du tableau colors.
    • À chaque itération, la variable color prend la valeur d’un élément du tableau.
    • console.log(color) : Cette ligne affiche la valeur actuelle de l’élément du tableau.
    • Lors de la première itération, color sera "red". Lors de la deuxième itération, ce sera "green", et ainsi de suite.

 

Exemple avec une chaîne de caractères

const message = "hello";
for (let char of message) {
    console.log(char);
}
    • La chaîne message contient le texte "hello".
    • La boucle itère directement sur les caractères de la chaîne message.
    • À chaque itération, la variable char prend la valeur d’un caractère de la chaîne.
    • console.log(char) : Cette ligne affiche le caractère actuel de la chaîne.
    • Lors de la première itération, char sera "h". Lors de la deuxième itération, ce sera "e", et ainsi de suite.

 

Exemple avec un ensemble (Set)

const uniqueNumbers = new Set([1, 2, 3, 4, 5]);
for (let number of uniqueNumbers) {
    console.log(number);
}
    • L’ensemble uniqueNumbers contient des valeurs uniques : 1, 2, 3, 4, et 5.
    • La boucle itère directement sur les valeurs de l’ensemble uniqueNumbers.
    • À chaque itération, la variable number prend la valeur d’un élément de l’ensemble.
    • console.log(number) : Cette ligne affiche la valeur actuelle de l’élément de l’ensemble.

 

 

Exemple avec une carte (Map)

const map = new Map([
    ['name', 'Alice'],
    ['age', 25],
    ['city', 'Paris']
]);
for (let [key, value] of map) {
    console.log(key + ": " + value);
}
    • La carte map contient des paires clé-valeur : ['name', 'Alice'], ['age', 25], et ['city', 'Paris'].
    • La boucle itère directement sur les paires clé-valeur de la carte map.
    • À chaque itération, les variables key et value prennent respectivement les valeurs de la clé et de la valeur de chaque paire.
    • console.log(key + ": " + value) : Cette ligne affiche chaque clé suivie de sa valeur correspondante.

 

les Objets

 

En JavaScript, un objet est une collection de paires clé-valeur. Les clés (ou propriétés) sont des chaînes de caractères, et les valeurs peuvent être de n’importe quel type de données : chaînes, nombres, tableaux, autres objets, fonctions, etc.

// Déclaration d'un objet
const person = {
    firstName: "John",
    lastName: "Doe",
    age: 30,
    // Méthode de l'objet
    greet: function() {
        return `Bonjour, je suis ${this.firstName} ${this.lastName}`;
    }
};

// Accéder à une propriété
console.log(person.firstName); // Affiche: John

// Appeler une méthode de l'objet
console.log(person.greet()); // Affiche: Bonjour, je suis John Doe
    • const person = { ... } : Déclare un objet nommé person avec trois propriétés (firstName, lastName, age) et une méthode (greet).
    • person.firstName : Accède à la propriété firstName de l’objet.
    • person.greet() : Appelle la méthode greet de l’objet. this fait référence à l’objet actuel (person), donc this.firstName accède à la propriété firstName de l’objet.

 

Propriétés Dynamiques et Accès

 

Les propriétés des objets peuvent également être définies de manière dynamique et accédées de différentes façons.

const car = {};
car["make"] = "Toyota";
car["model"] = "Corolla";

// Accéder aux propriétés dynamiques
console.log(car["make"]); // Affiche: Toyota
console.log(car.model);  // Affiche: Corolla
    • car["make"] : Accède à la propriété make en utilisant une chaîne comme clé.
    • car.model : Accède à la propriété model en utilisant la notation par point.

 

Manipulation du DOM

 

Le DOM (Document Object Model) est une interface qui représente le document HTML comme une structure d’objets. JavaScript permet de manipuler cette structure pour modifier le contenu et la structure d’une page web en temps réel.

// Sélectionner un élément par son ID
const header = document.getElementById("header");
header.textContent = "Bienvenue!";

// Sélectionner un élément par sa classe
const items = document.getElementsByClassName("item");
for (let i = 0; i < items.length; i++) {
    items[i].style.color = "blue";
}

// Sélectionner un élément avec un sélecteur CSS
const firstButton = document.querySelector("button");
firstButton.textContent = "Cliquez-moi!";
    • document.getElementById("header") : Sélectionne l’élément HTML avec l’ID header et permet de modifier son contenu avec .textContent.
    • document.getElementsByClassName("item") : Sélectionne tous les éléments avec la classe item. getElementsByClassName retourne une collection HTML en direct. On peut parcourir cette collection avec une boucle pour appliquer des styles ou effectuer d’autres manipulations.
    • document.querySelector("button") : Sélectionne le premier élément correspondant au sélecteur CSS "button". querySelector est plus flexible et permet l’utilisation de sélecteurs CSS plus complexes.

 

Événements

 

Les événements permettent de réagir aux actions de l’utilisateur, comme les clics ou les frappes au clavier.

// Ajouter un écouteur d'événement au clic sur un bouton
const button = document.querySelector("button");
button.addEventListener("click", () => {
    alert("Button clicked!");
});

// Ajouter un écouteur d'événement au survol de la souris sur un élément
const box = document.querySelector(".box");
box.addEventListener("mouseover", () => {
    box.style.backgroundColor = "yellow";
});
    • addEventListener("click", () => { ... }) : Ajoute un écouteur d’événement pour le clic. La fonction de rappel (callback) sera exécutée lorsque l’événement se produira.
    • addEventListener("mouseover", () => { ... }) : Ajoute un écouteur d’événement pour le survol de la souris. Ici, la couleur de fond de l’élément sera changée en jaune lorsque la souris le survole.

 

Création et Insertion d’Éléments

 

On peut également créer de nouveaux éléments HTML et les ajouter à la page.

// Créer un nouvel élément <div>
const newDiv = document.createElement("div");
newDiv.textContent = "Ceci est un nouveau div.";
newDiv.className = "new-class";

// Ajouter le nouvel élément au corps du document
document.body.appendChild(newDiv);

// Créer un nouvel élément <p> et le placer dans le <div>
const newParagraph = document.createElement("p");
newParagraph.textContent = "Ceci est un paragraphe dans le nouveau div.";
newDiv.appendChild(newParagraph);
    • document.createElement("div") : Crée un nouvel élément <div>.
    • newDiv.textContent = "Ceci est un nouveau div." : Définit le texte du nouvel élément <div>.
    • document.body.appendChild(newDiv) : Ajoute le nouvel élément <div> à la fin du <body>.
    • newDiv.appendChild(newParagraph) : Ajoute le nouvel élément <p> à l’intérieur du <div> nouvellement créé.

 

Asynchrone en JavaScript

Étape 1: Callbacks
function afficherMessage() {
            console.log('Message affiché après 2 secondes');
        }

        setTimeout(afficherMessage, 2000); // Exécute afficherMessage après 2 secondes
    • La fonction afficherMessage est définie pour afficher un message dans la console.
    • setTimeout est une fonction intégrée qui exécute afficherMessage après 2000 millisecondes (2 secondes).

 

function chargerDonnees(callback) {
            let xhr = new XMLHttpRequest();
            xhr.open('GET', 'https://jsonplaceholder.typicode.com/posts/1');
            xhr.onreadystatechange = function() {
                if (xhr.readyState === 4 && xhr.status === 200) {
                    callback(JSON.parse(xhr.responseText));
                }
            };
            xhr.send();
        }

        function afficherDonnees(donnees) {
            console.log(donnees);
        }

        chargerDonnees(afficherDonnees);
    • chargerDonnees prend une fonction de callback comme argument.
    • XMLHttpRequest est utilisé pour effectuer une requête HTTP GET vers une URL.
    • onreadystatechange est un événement qui vérifie si la requête est terminée (readyState === 4) et si elle a réussi (status === 200).
    • Si la requête est réussie, la callback est appelée avec les données obtenues.
    • afficherDonnees est une fonction qui affiche les données dans la console.
    • chargerDonnees(afficherDonnees) exécute la requête et passe afficherDonnees comme callback.

 

Étape 2: Promesses
let maPromesse = new Promise(function(resolve, reject) {
    let condition = true;
    if (condition) {
        resolve('La promesse a été résolue!');
    } else {
        reject('La promesse a été rejetée.');
    }
});

maPromesse.then(function(resultat) {
    console.log(resultat);
}).catch(function(erreur) {
    console.log(erreur);
});
    • Une promesse est créée avec new Promise, qui prend une fonction avec deux arguments : resolve et reject.
    • resolve est appelé lorsque l’opération réussit.
    • reject est appelé lorsque l’opération échoue.
    • then est utilisé pour gérer le succès de la promesse.
    • catch est utilisé pour gérer les erreurs ou le rejet de la promesse.

 

    fetch('https://jsonplaceholder.typicode.com/posts/1')
        .then(response => response.json())
        .then(data => console.log(data))
        .catch(error => console.error('Erreur:', error));
    • fetch est une fonction intégrée qui effectue des requêtes HTTP et retourne une promesse.
    • then est utilisé pour traiter la réponse de la requête.
    • response.json() est utilisé pour transformer la réponse en format JSON.
    • Un deuxième then est utilisé pour traiter les données JSON.
    • catch est utilisé pour gérer les erreurs éventuelles.

 

Étape 3: Async/Await
async function obtenirDonnees() {
    try {
        let response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
        let data = await response.json();
        console.log(data);
        } 
    catch (error) {
        console.error('Erreur:', error);
        }
    }

obtenirDonnees();
    • async avant une fonction la rend asynchrone et elle retourne une promesse.
    • await est utilisé pour attendre la résolution d’une promesse. Il peut seulement être utilisé dans une fonction asynchrone.
    • try...catch est utilisé pour gérer les erreurs.
    • fetch est utilisé pour effectuer une requête HTTP, et await attend la réponse.
    • response.json() transforme la réponse en JSON, et await attend cette opération.
    • Si une erreur se produit, elle est capturée et affichée dans la console.

 

Callbacks, Promesses et Async/Await

 

Pour résumer, voici un exemple complet montrant comment utiliser les trois techniques pour effectuer une requête réseau.

// Callback
function chargerAvecCallback(callback) {
    let xhr = new XMLHttpRequest();
    xhr.open('GET', 'https://jsonplaceholder.typicode.com/posts/1');
    xhr.onreadystatechange = function () {
        if (xhr.readyState === 4 && xhr.status === 200) {
            callback(JSON.parse(xhr.responseText));
        }
    };
    xhr.send();
}

chargerAvecCallback(function (data) {
    console.log('Callback:', data);
});

// Promesse
function chargerAvecPromesse() {
    return new Promise(function (resolve, reject) {
        let xhr = new XMLHttpRequest();
        xhr.open('GET', 'https://jsonplaceholder.typicode.com/posts/1');
        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
                resolve(JSON.parse(xhr.responseText));
            } else if (xhr.readyState === 4) {
                reject('Erreur de chargement');
            }
        };
        xhr.send();
    });
}

chargerAvecPromesse().then(function (data) {
    console.log('Promesse:', data);
}).catch(function (error) {
    console.error('Erreur:', error);
});

// Async/Await
async function chargerAvecAsyncAwait() {
    try {
        let response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
        let data = await response.json();
        console.log('Async/Await:', data);
    } catch (error) {
        console.error('Erreur:', error);
    }
}

chargerAvecAsyncAwait();
    • Callback : Une fonction chargerAvecCallback utilise XMLHttpRequest pour charger des données et appelle une fonction de callback avec les données une fois chargées.
    • Promesse : Une fonction chargerAvecPromesse crée une promesse qui utilise XMLHttpRequest pour charger des données et résout ou rejette la promesse en fonction du succès de la requête.
    • Async/Await : Une fonction asynchrone chargerAvecAsyncAwait utilise fetch pour charger des données et await pour attendre la réponse et la conversion en JSON.

 

Conclusion

 

Vous avez maintenant les bases pour commencer à utiliser JavaScript pour rendre vos pages web interactives. Pour aller plus loin, explorez des concepts plus avancés, les bibliothèques JavaScript comme jQuery, et consultez des ressources supplémentaires :