Par Valentin Brosseau / @c4software
Le JavaScript vous connaissez ?
Nous allons nous concentrer sur le Web…
Mais ce que vous apprendrez ici est également valide sur les autres plateformes.
JavaScript -> EcmaScript…
Mais encore…
Beaucoup de différences… Donc attention au support !
Trois écoles :
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
Un conseil de vieux… Créer des librairies / externaliser vos JS.
Un langage oui…
Mais faiblement typé !
(voir pas du tout… Enfin, si, mais non)
C'est « un langage » donc…
Quelques rappels
;
/**
* Commentaire multignes
* Par exemple en début de fichier pour détailler le contenu
*/
// Commenter une ligne.
console.log("Ceci est un exemple");
console.log("Ceci est un exemple 2"); // Peux également être placé en fin de ligne.
var maVariable;
let maVariable;
const maVariable;
let
est similaire à var
, c'est la façon moderne de déclarer une variable.const
est une variable « constante » (impossible donc d'écraser la valeur après déclaration)<script>
let entier = 42; //nombre entier
let reel = 0.42; // nombre réel
let texte = "texte"; // chaîne de caractères
let booleen = true; // Un booléen
let tab = [1, "deux", "trois"]; // tableau
let obj = { clef1: "valeur", clef2: "Valentin" }; // Tableau associatif (clef => valeur, également appelé objet en JavaScript)
</script>
let entier = 42; //nombre entier
entier = "test";
En JavaScript c'est possible
let nom = "Valentin";
nom = "Thomas"; // Pas de problème
let nom = "Romain"; // Erreur.
// VM1498:4 Uncaught SyntaxError: Identifier 'nom' has already been declared
const age_du_capitaine = 84;
age_du_capitaine = 33;
// !! ERREUR !!
// VM1583:2 Uncaught TypeError: Assignment to constant variable.
const IN_PROGRESS = "200";
const DONE = "400";
const FAILED = "1000";
if (order.status == DONE) {
alert("Commande finalisée");
}
if (order.status == 400) {
alert("Commande finalisée");
}
Type | Contenu | Type d'opération | Usage |
---|---|---|---|
string |
"Une chaine de caractère" | Gestion du texte, concaténation | Permets de stocker du texte (saisie utilisateur par exemple). |
int |
42 | Opération mathématique | Comme en mathématique |
boolean |
True ou False |
Opération logique | Permets de faire des actions logiques. C'est un type très important en informatique |
float |
10.3 | Opération mathématique | Comme en mathématique. Attention la notation du chiffre à virgule est avec un . . |
array |
["a", "b", "c"] | Contiens des listes de « quelques choses » | |
object |
{nom: "Brosseau", prenom: "Valentin"} |
Structure de données |
<script>
// Déclarer / créer une fonction
function maFonction() {
alert("test");
}
// Déclarer / créer une fonction
function maFonctionQuiRetourne42() {
return 42;
}
</script>
<script>
function addition(a, b) {
return a + b;
}
// L'appeler
maFonction();
console.log(maFonctionQuiRetourne42()); // Affiche dans la console 42
alert(addition(40, 2)); // Affiche une alert avec le résultat de l'addition 40 + 2 => 42
</script>
<script>
// Exemple 1
let age = 18;
if (age > 18) {
alert("Je suis majeur");
} else {
alert("Je suis mineur");
}
// Exemple 2
let estMajeur = true;
if (estMajeur) {
// Est équivalent à estMajeur == true
alert("La personne est majeur");
}
// Exemple 3
if (maFonctionDeTest() == true) {
alert(
"la fonction est appelée, et si celle-ci « return » true l'alert est affiché"
);
}
</script>
À l'ancienne
<script>
while (true) {
console.log("Votre première boucle infinie");
}
for (let i = 0; i < 3; i++) {
alert(i);
}
<script>
Moderne
<script>
const arr = [1, 2, 3, 4];
// Parcours l'ensemble du tableau
arr.forEach((i) => {
alert(i);
});
// Transforme le tableau
arrModif = arr.map((i) => {
return i * 2;
}); // arrModif contiendra => [2, 4, 6, 8];
</script>
const arr = [1, 2, 3, 4];
arr.filter((curr) => curr > 2); // --> Retourne un tableau avec seulement les valeurs supérieures à 2
Repose sur un arbre appelé
DOM (Document Object Model).
Nous parlerons donc d'un Arbre HTML.
(Vous avez compris que c'était important ?)
Sélecteur | Usage |
---|---|
#item | Élément unique dans votre page |
.rouge | Class réutilisable (multiple) dans votre code |
p | L'ensemble des balises de type <p> |
class="rouge"
=> .rouge
id="monId"
=> #monId
document.getElementById("elementId");
document.getElementsByClassName("maClass");
document.getElementsByTagName("div");
document.body;
// Retourne la liste (array) des éléments
document.querySelectorAll("#elementId");
document.querySelectorAll(".maClass");
document.querySelectorAll("div");
// Retourn le premier élément trouvé
document.querySelector("#elementId");
document.querySelector(".maClass");
document.querySelector("div");
// Exemples d'utilisations
document.querySelector("#elementId").innerHTML = "Voilà valeur";
document.querySelectorAll("div").forEach((it) => {
it.innerHTML = "Parcours chaque div et remplace le contenu par <=";
});
$("#elementId");
$(".maClass");
$("div");
⚠️ Cette solution peut sembler tentante… ⚠️
Mais attention, si la valeur ajoutée contient une saisie utilisateur, vous risquez une XSS sur votre site Internet.
Donc méfiance.
Ici aussi plusieurs façons :
style
.class
.// Le style
let element = document.getElementById("monId");
element.style.display = "none";
// La class
let element = document.getElementById("monId");
element.classList.add("maClass");
// Avec jQuery
$("div").hide();
$("div").css("background-color", "yellow");
$("div").addClass("maClass");
<input type="text" id="monInput" />
// VanillaJS
document.getElementById("monInput").value;
// En jQuery
$("#monInput").val();
<input type="button" id="btn" value="Click ! " />
<script>
// Pure JS
document.getElementById("btn").addEventListener("click", maFonction, true);
// jQuery
$("#btn").click(maFonction);
</script>
<input type="button" onclick="maFonction(this)" value="Click ! " />
<script>
function maFonction(elem) {
// elem => est le bouton sur lequel vous avez cliqué
}
</script>
Le this
corresponds à l'élément sur lequel vous avez cliqué.
(Appelé au moment du clique par l'utilisateur utilisateur)
Simple ? Compliqué ?
En réalité, comme beaucoup de choses du WEB la pratique vous donnera l'habitude de manipuler le JS. Il deviendra pour vous une véritable seconde nature.
C'était un simple exemple… La liste des évènements possibles bien plus longue !
Pouvez-vous me dire à quoi ça correspond ?
var resultat = "";
ajax("http://api/getRandom", (randomValue) => {
resultat = randomValue;
});
console.log(resultat);
console.log()
?Source Wikipédia |
Deux façons de faire :
fetch
, Promise
)$.get
, $.post
)Les promises
L'Ajax c'est un gros morceau, tellement gros, qui serait possible d'y passer des heures et des heures tellement le sujet est vaste.
Nous allons donc réaliser une première expérimentation