6 octobre 2024
JavaScript
JavaScript est un langage de programmation utilisé pour créer des interactions dynamiques sur les pages web.
Syntaxe JavaScript
Variables et Types
JavaScript propose différentes manières de déclarer des variables :
var
: déclare une variable avec un portée fonctionnelle (avant ES6).let
: déclare une variable avec une portée bloc (ES6+).const
: déclare une constante avec une portée bloc, sa valeur ne peut pas être réassignée.
var x = 10;
let y = 20;
const z = 30;
Le point-virgule (;
) en JavaScript est un caractère de syntaxe essentiel qui marque la fin d’une instruction. Ce caractère est parfois optionnel (mécanisme d’insertion automatique ASI - Automatic Semicolon Insertion), et peut donc être source d’erreur.
Il délimite les instructions. Chaque fois qu’on termine une instruction (comme une déclaration de variable ou un appel de fonction), il faut utiliser le point virgule.
Dans certaines situations, JavaScript insère automatiquement des points-virgules :
let x = 10
let y = 20
console.log(x + y) // Affiche 30
Dans cet exemple, le code s’exécute sans problème, car JavaScript insère des points-virgules là où c’est nécessaire.
Mais lorsque le code est mal structuré cela peut devenir problématique
return
{
message: "Hello"
}
Ici, JavaScript interprète la ligne return
comme une instruction complète et insère un point-virgule après celle-ci. Le bloc suivant n’est donc pas associé au return
, ce qui renvoie undefined
. Il faudrait écrire le code comme suit :
return {
message: "Hello"
};
Dans certains cas, le point-virgule est obligatoire, c’est le cas avec les fonctions exécutées immédiatement (IIFE). Elles nécessitent un point-virgule avant leur déclaration pour éviter des erreurs de syntaxe.
;(function() {
console.log("IIFE exécutée !");
})();
idem lorsque plusieurs instructions sont sur la même ligne
let x = 5; let y = 10; console.log(x + y); // Affiche 15
Il peut être omis sans provoquer d’erreurs avec les blocs conditionnels, les boucl, et les déclarations de fonctions
if (true) {
console.log("Condition vraie");
}
function hello() {
console.log("Bonjour !");
}
Une bonne pratique est de l’utiliser systématiquement et d’être cohérent si on ne l’utilise pas partout.
Types de données JavaScript :
Number
: entiers ou nombres à virgule flottante (42
,3.14
)String
: chaîne de caractères ("Hello World"
)Boolean
:true
oufalse
Array
: tableau ([1, 2, 3]
)Object
: objet clé-valeur ({name: "John", age: 30}
)Undefined
: valeur d’une variable non définieNull
: valeur nulle explicitement assignéeSymbol
: unique et immuable (ES6)BigInt
: entiers plus grands queNumber.MAX_SAFE_INTEGER
(ES2020)
Opérateurs Booléens et Opérations Mathématiques
Opérateurs arithmétiques permettent d’effectuer les opérations mathématiques de base.
+
: addition-
: soustraction*
: multiplication/
: division%
: modulo
let a = 5 + 2; // 7
let b = 5 % 2; // 1
Opérateurs de comparaison :
==
: Égalité en valeur===
: Égalité stricte (en valeur et en type)!=
: Différent en valeur!==
: Différent strict (en valeur et en type)>
,<
: Supérieur, inférieur>=
,<=
: Supérieur ou égal, inférieur ou égal
console.log(5 == "5"); // true (égalité en valeur)
console.log(5 === "5"); // false (égalité stricte)
Opérateurs logiques :
&&
: ET logique||
: OU logique!
: Négation
let result = (5 > 3) && (10 < 20); // true
Fonctions
Les fonctions sont des blocs de code réutilisables. Ils associent généralement 0, une ou plusieurs valeurs d’entrée à une valeur de sortie.
Pour déclarer une fonction on utilise le mot-clé function
:
function somme(a, b) {
return a + b;
}
let result = somme(5, 3); // 8
Il est aussi possible de rédiger des fonctions fléchées
(ES6+). La syntaxe est plus concise et ces fonctions ne lient pas leur propre contexte this
.
const addition = (a, b) => a + b;
Chaque argument peut disposer d’une valeur par défaut;
function greet(name = "World") {
return `Hello ${name}!`;
}
console.log(greet()); // "Hello World!"
Conditions
Les structures conditionnelles permettent d’exécuter du code spécifique si un situation particulière est rencontrée.
let age = 18;
if (age >= 18) {
console.log("Vous êtes majeur.");
} else {
console.log("Vous êtes mineur.");
}
Pour les évaluations simple JavaScript dispose d’une autre syntaxe reposant sur l’utilisation de l’opérateur ternaire ?
let message = (age >= 18) ? "Majeur" : "Mineur";
Boucles
Les boucles permettent de répéter un bloc de code pour chaque élément d’une liste, ou jusqu’à ce qu’une condition soit remplie.
Boucle for
for (let i = 0; i < 5; i++) {
console.log(i); // Affiche 0, 1, 2, 3, 4
}
Boucle while
let count = 0;
while (count < 5) {
console.log(count);
count++;
}
Boucle for...of
Cette boucle est utilisée pour parcourir les éléments d’un tableau.
let fruits = ["Pomme", "Banane", "Orange"];
for (let fruit of fruits) {
console.log(fruit);
}
Types Simples
String
: Les chaînes sont des séquences de caractères. Elles peuvent être entourées de guillemets simples ou doubles.
let str = "Hello, World!";
Number
: JavaScript ne fait pas de distinction entre les entiers et les nombres à virgule flottante, tout est traité comme Number
.
let num = 42;
let pi = 3.1415;
Boolean
: Les valeurs booléennes sont soit true
soit false
.
let isTrue = true;
let isFalse = false;
Structures de Données
Objets (Dictionnaires)
Les objets
sont des collections de paires clé-valeur. Les clés sont des chaînes ou des symboles, et les valeurs peuvent être de n’importe quel type.
On peut intégrer des fonctions dans un objet JavaScript
let personne = {
nom: "Sara",
age: 35,
greet: function() {
console.log(`Hello, je m'appelle ${this.nom}`);
}
};
personne.greet(); // "Bonjour, je m'appelle Sara"
Tableaux (Arrays)
Les tableaux sont des listes ordonnées d’éléments. Les éléments sont accessibles par leur index (qui commence à 0).
let nombres = [1, 2, 3, 4, 5];
console.log(nombres[0]); // 1
On peut ajouter des éléments à un tableau avec push()
:
nombres.push(6); // Ajoute un élément à la fin du tableau
Tuples
JavaScript ne dispose pas des tuples, mais dans la mesure ou ces derniers correspondent à une collections immuable et ordonnées d’éléments, on peut procéder de la manière suivante, en ayant recours à un tableau (dont la longueur est connue).
const tuple = [1, "apple", true];
Interagir avec le DOM
Le DOM
(Document Object Model) représente la structure HTML de la page. JavaScript peut interagir avec le DOM pour modifier dynamiquement l’apparence et le contenu d’une page.
Sélectionner des Éléments
3 fonctions permettent de sélectionner des éléments :
document.getElementById()
: sélectionne un élément par son@id
.
let element = document.getElementById("monID");
document.querySelector()
: sélectionne le premier élément correspondant à un sélecteur CSS.
let element = document.querySelector(".maClasse");
document.querySelectorAll()
: Sélectionne tous les éléments correspondant à un sélecteur CSS.
let elements = document.querySelectorAll("p"); // Tous les paragraphes
Modifier le Contenu
La fonction element.innerHTML
permet de modifier ou récupérer le contenu HTML d’un élément.
element.innerHTML = "<p>Nouveau contenu</p>";
element.textContent
modifie ou récupère uniquement le texte.
element.textContent = "Nouveau texte";
Modifier les Attributs
element.setAttribute()
permet de modifier ou d’ajouter un attribut à un élément, alors que element.getAttribute()
permet de écupérer la valeur d’un attribut.
element.setAttribute("class", "nouvelleClasse");
let href = element.getAttribute("href");
Modifier les Styles
Les styles CSS peuvent être modifiés directement avec JavaScript via la propriété style.
element.style.color = "blue"; // Changer la couleur du texte
element.style.display = "none"; // Cacher l'élément
Ajouter et Supprimer des Classes
element.classList.add()
et element.classList.remove()
permettent respectivement d’ajouter et de supprimer une ou plusieurs classes. element.classList.toggle()
quant à elle permet d’ajouter une classe si elle n’existe pas, ou de la retirer si elle existe.
element.classList.add("visible");
element.classList.remove("invisible");
element.classList.toggle("active");
Exécution du code JavaScript
L’emplacement d’un script dans une page HTML et la manière dont on configure son exécution peuvent avoir des impacts sur les performances et l’interaction avec le DOM.
Placement des scripts dans la page HTML
le code JavaScript est généralement inclus dans une balise <script/>
que l’on place soit dans le <head/>
(exécute immédiatement le code, avant le chargement de la page) soit à la toute fin du <body/>
(le code est exécuté après que tout le code HTML soit chargé). L’emplacement des éléments <script/>
a donc une importante, surtout lorsque l’on souhaite intéragir avec le DOM
.
Lorsque placé dans le <head>
, et sous réserve d’utiliser l’attribut @src
, deux attributs peuvent être utilisés pour contrôler quand et comment le script doit s’exécuter.
async
: charge en parallele et exécute le script de façon asynchrone, dés qu’il est disponible, sans suivre d’ordre particulier si plusieurs<script/>
sont présents ;defer
: diffère l’exécution à la fin du chargement du document, juste avantDOMContentLoaded
, mais l’ordre d’exécution entre les scripts est maintenu.
L’idée derrière ces deux attributs était d’assouplir la pratique de placer les <script/>
à la fin du <body/>
.
Deux évènements permettent également de gérer le chargement et l’exécution des scripts
window.onload
: se déclenche après que tout le contenu de la page a été entièrement chargé (ressources externes comprises (images, scripts, CSS)).DOMContentLoaded
: se déclenche dès que le DOM est complètement chargé, mais avant les ressources externes. À utiliser plutôt quewindow.onload
.
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Exécuter JavaScript</title>
<!-- Le script est chargé dans le head, mais le code ne sera exécuter qu'après que la page soit soit chargé. -->
<script>
window.onload = function() {
function warning(){
alert("Survol du titre !")
};
const el = document.getElementById("myTitle");
el.addEventListener("mouseover", warning);
};
/* ou
document.addEventListener('DOMContentLoaded', function() {
...
});*/
</script>
</head>
<body>
<h1 id="myTitle">Page HTML avec JavaScript</h1>
</body>
</html>
Gestion des évènements
addEventListener
permet d’attacher des fonctions à des événements du DOM
(comme le clic, le survol, etc.).
document.getElementById('myButton').addEventListener('click', function() {
alert("Bouton cliqué !");
});