Ce document couvre les fondations essentielles de la programmation JavaScript, en abordant des concepts allant de la structure de base du web aux fonctionnalités avancées des objets et des fonctions.
Qu'est-ce que JavaScript ?
JavaScript est un langage de script exécuté côté client, conçu à l'origine pour ajouter des fonctionnalités dynamiques aux pages web HTML. Bien qu'inspiré par Java dans sa syntaxe initiale, il est distinct de Java, ce dernier étant un langage côté serveur.
L'Évolution et les Applications de JavaScript
Initialement destiné à la validation de formulaires, JavaScript a considérablement évolué. Il est aujourd'hui utilisé pour une vaste gamme d'applications :
- Effets visuels sur les pages web
- Développement côté serveur (Node.js)
- Outils en ligne de commande
- Applications de bureau (Electron)
- Applications mobiles (Cordova)
- Internet des Objets (IoT)
- Développement de jeux
Différence entre HTML, CSS et JavaScript
- HTML : Définit la structure et le contenu d'une page web.
- CSS : Est responsable de la présentation et de l'esthétique de la page.
- JavaScript : Contrôle le contenu et ajoute des effets dynamiques et interactifs.
Composants de JavaScript
- ECMAScript : Le cœur de JavaScript, définissant la syntaxe et les types de données.
- BOM (Browser Object Model) : Un ensemble d'APIs pour interagir avec le navigateur (fenêtres, pop-ups, etc.).
- DOM (Document Object Model) : Une API pour manipuler la structure et le contenu des documents HTML, traitant la page comme un arbre de nœuds.
Premiers Pas avec JavaScript
Le code JavaScript peut être intégré de plusieurs manières :
- Directement dans les attributs HTML (ex:
onclick). - Dans des balises
<script>dans l'en-tête (<head>) ou le corps (<body>) du document. - Dans des fichiers externes
.jsliés via la balise<script src="main.js"></script>.
Note importante : Une balise <script> avec un attribut src ne doit pas contenir de code JavaScript directement.
Variables
Les variables sont des conteneurs nommés en mémoire pour stocker des données. Elles sont déclarées avec le mot-clé var (ou let/const dans les versions plus récentes).
var monAge; // Déclaration
monAge = 18; // Assignation
var nomUtilisateur = "Alice"; // Déclaration et assignation combinées
var age, prenom;
Règles de nommage : Les noms de variables peuvent contenir des lettres, des chiffres, des underscores (_) et des signes dollar ($). Ils ne doivent pas commencer par un chiffre et ne peuvent pas être des mots-clés réservés. Il est recommandé d'utiliser la convention de nommage camelCase (ex: nomUtilisateur).
Types de Données
JavaScript possède des types de données primitifs et complexes.
- Primitifs :
Number,String,Boolean,Undefined,Null. - Complexe :
Object(y compris les tableaux et les fonctions).
Le type de données d'une variable peut être vérifié avec l'opérateur typeof.
var quantite = 100;
console.log(typeof quantite); // "number"
var message = "Bonjour";
console.log(typeof message); // "string"
var estValide = true;
console.log(typeof estValide); // "boolean"
var dataIndefinie;
console.log(typeof dataIndefinie); // "undefined"
var dataNulle = null;
console.log(typeof dataNulle); // "object" (comportement historique)
Littéraux
Un littéral est une notation dans le code source qui représente une valeur fixe.
- Littéraux numériques :
10,3.14 - Littéraux de chaîne :
'Texte',"Autre texte" - Littéraux booléens :
true,false - Littéraux d'objet :
{ clé: valeur } - Littéraux de tableau :
[élément1, élément2]
Commentaires
Les commentaires sont utilisés pour expliquer le code.
- Commentaire sur une seule ligne :
// Ceci est un commentaire - Commentaire multi-lignes :
/* Ceci est un commentaire sur plusieurs lignes */
Conversion de Types
JavaScript effectue souvent des conversions de types implicites, mais des conversions explicites sont également possibles.
- Vers String : Utilisation de
.toString(),String(), ou concaténation avec+ "". - Vers Number : Utilisation de
.parseInt(),.parseFloat(),Number(), ou opérateurs arithmétiques (ex:+"5"). - Vers Boolean : Les valeurs
0,""(chaîne vide),null,undefined, etNaNsont converties enfalse. Toutes les autres valeurs sont converties entrue.
Opérateurs
Les opérateurs sont utilisés pour effectuer des opérations sur des opérandes.
- Arithmétiques :
+,-,*,/,%. - Unitaires :
++(incrémentation),--(décrémentation). - Logiques :
&&(ET),||(OU),!(NON). - Comparaison :
==(égal à),===(strictement égal à),!=,!==,<,>,<=,>=. La différence principale entre==et===est que===vérifie également l'égalité des types. - Assignation :
=,+=,-=,*=,/=,%=.
Les opérateurs ont une priorité qui détermine l'ordre d'évaluation.
Expressions et Instructions
- Une expression est une combinaison d'opérateurs, de littéraux et d'appels de fonction qui produit une valeur.
- Une instruction (ou déclaration) est une commande qui effectue une action. Les instructions sont généralement terminées par un point-virgule (
;).
Contrôle de Flux
Le contrôle de flux détermine l'ordre d'exécution des instructions.
- Structure Séquentielle : Exécution ligne par ligne, de haut en bas.
- Structures Conditionnelles (Branchement) : Exécution de code basée sur des conditions (
if,else if,else,switch, opérateur ternaire? :). - Structures Répétitives (Boucles) : Exécution répétée de blocs de code (
while,do...while,for).
Structures Codnitionnelles
L'instruction if permet d'exécuter du code si une condition est vraie.
if (condition) {
// Bloc de code à exécuter si la condition est vraie
} else if (autreCondition) {
// Bloc de code si autreCondition est vraie
} else {
// Bloc de code si aucune condition précédente n'est vraie
}
// Opérateur Ternaire (raccourci pour if/else simple)
var resultat = (condition) ? valeurSiVrai : valeurSiFaux;
L'instruction switch est utile pour comparer une variable à plusieurs valeurs possibles.
switch (expression) {
case valeur1:
// Code pour valeur1
break;
case valeur2:
// Code pour valeur2
break;
default:
// Code par défaut
}
Structures Répétitives
Les boucles permettent de répéter des actions.
while: Exécute le bloc de code tant que la condition est vraie.do...while: Similaire àwhile, mais exécute le bloc de code au moins une fois avant de vérifier la condition.for: Idéal lorsque le nombre d'itérations est connu. Il comprend une initialisation, une condition de continuation, et une expression d'incrémentation/décrémentation.
// Boucle for exemple
for (var i = 0; i < 5; i++) {
console.log("Itération numéro : " + i);
}
// Utilisation de 'break' pour sortir prématurément de la boucle
// Utilisation de 'continue' pour passer à l'itération suivante
Tableaux (Arrays)
Les tableaux sont des collections ordonnées d'éléments, accessibles par un indice numérique (commençant à 0).
var couleurs = ["rouge", "vert", "bleu"];
console.log(couleurs[0]); // "rouge"
console.log(couleurs.length); // 3
// Ajout d'un élément
couleurs.push("jaune");
// Parcours d'un tableau
for (var i = 0; i < couleurs.length; i++) {
console.log(couleurs[i]);
}
Fonctions
Les fonctiosn sont des blocs de code réutilisables qui effectuetn une tâche spécifique. Elles peuvent accepter des paramètres et retourner une valeur.
// Déclaration de fonction
function saluer(nom) {
return "Bonjour, " + nom + " !";
}
// Appel de fonction
var messageBonjour = saluer("Alice");
console.log(messageBonjour); // "Bonjour, Alice !"
// Fonction sans retour (retourne 'undefined' implicitement)
function afficherMessage(message) {
console.log(message);
}
// La fonction 'arguments' permet d'accéder à tous les arguments passés à une fonction
function somme(...nombres) { // Utilisation de rest parameters (ES6) pour un tableau d'arguments
let total = 0;
for (const nombre of nombres) {
total += nombre;
}
return total;
}
console.log(somme(1, 2, 3, 4)); // 10
Portée (Scope)
La portée détermine la visibilité et l'accessibilité des variables et fonctions.
- Portée Globale : Variables déclarées en dehors de toute fonction.
- Portée Locale (Fonctionnelle) : Variables déclarées à l'intérieur d'une fonction.
- Portée de Bloc (introduite avec
letetconsten ES6) : Variables déclarées à l'intérieur d'une paire d'accolades ({ }).
La chaîne de portée fait référence à la hiérarchie des portées dans laquelle le code est exécuté.
Pré-analyse (Hoisting)
Avant l'exécution du code, l'interpréteur JavaScript effectue une pré-analyse. Les déclarations de variables (avec var) et les déclarations de fonctions sont "remontées" (hoisted) au début de leur portée respective. Seules les déclarations sont remontées, pas les assignations.
console.log(variableRemontee); // undefined (la déclaration est remontée, pas l'assignation)
var variableRemontee = "Je suis là !";
fonctionRemontee(); // Fonctionne car la déclaration de la fonction est remontée
function fonctionRemontee() {
console.log("Fonction exécutée !");
}
Objets
Les objets sont des collections de paires clé-valeur. Les clés sont appelées propriétés (attributs) et les valeurs peuvent être des données primitives, d'autres objets, ou des fonctions (méthodes).
// Création d'un objet avec la syntaxe littérale
var personne = {
nom: "Bob",
age: 30,
profession: "Ingénieur",
saluer: function() {
console.log("Salut, mon nom est " + this.nom); // 'this' fait référence à l'objet personne
}
};
console.log(personne.nom); // "Bob"
personne.saluer(); // "Salut, mon nom est Bob"
// Utilisation du mot-clé 'new' avec une fonction constructeur
function Voiture(marque, modele) {
this.marque = marque;
this.modele = modele;
this.demarrer = function() {
console.log("La voiture démarre...");
};
}
var maVoiture = new Voiture("Toyota", "Corolla");
console.log(maVoiture.marque); // "Toyota"
maVoiture.demarrer(); // "La voiture démarre..."
Parcours d'Objets et Héritage
La boucle for...in permet d'itérer sur les propriétés d'un objet.
for (var cle in personne) {
console.log(cle + ": " + personne[cle]);
}
La suppression de propriétés se fait avec l'opérateur delete.
Types Primitifs vs. Types Complexes (Référence)
Les types primitifs (Number, String, etc.) sont passés par valeur aux fonctions. Les types complexes (Object, Array) sont passés par référence.
Objets Internes
JavaScript fournit plusieurs objets intégrés pour des tâches courantes.
Math: Fournit des propriétés et méthodes mathématiques (ex:Math.random(),Math.floor(),Math.max()).Date: Permet de manipuler les dates et heures.Array: Des méthodes pour manipuler les tableaux (ex:push(),pop(),slice(),splice(),join()).String: Des méthodes pour manipuler les chaînes de caractères (ex:substring(),indexOf(),replace(),split()).
Il est recommandé de consulter la documentation MDN (Mozilla Developer Network) pour explorer les méthodes spécifiques de chaque objet.
// Exemple avec Date
var maintenant = new Date();
console.log(maintenant.getFullYear()); // Année actuelle
console.log(maintenant.getMonth()); // Mois actuel (0-indexé)
// Exemple avec Array
var nombres = [1, 2, 3];
console.log(nombres.join('-')); // "1-2-3"
// Exemple avec String
var phrase = "Apprendre JavaScript";
console.log(phrase.substring(8)); // "JavaScript"