SlideShare une entreprise Scribd logo
1  sur  49
Télécharger pour lire hors ligne
JavaScript :
concepts de base
Kristen Le Liboux
Juillet 2013
Avertissements
Notions abordées
• Variables, fonctions, callbacks, fermetures (closures)
• Types, objets, tableaux, prototypes
• JSON
Public visé
• Déjà familier avec quelques notions de
programmation
• Opérateurs (+, *, ...) et structures de contrôle (if,
while, ...) supposés connus
2
Télécharger les exemples
Cet indicateur fait référence aux exemples qui
accompagnent cette présentation :
Vous pouvez les télécharger sur :
https://github.com/kleliboux/code-samples
3
exemple01.js
Fondamentaux de JavaScript
Langage de programmation :
• scripté (interprété)
pas de compilateur à proprement parler
• côté client
s’exécute dans un navigateur en général
(il existe des environnements côté serveur : NodeJS)
• asynchrone
plusieurs « morceaux » peuvent s’exécuter en //
4
Fondamentaux de JavaScript
Dans un navigateur, permet :
• de spécifier des changements sur le document :
• après son chargement,
• au cours de sa vie dans la fenêtre du navigateur,
• sur le contenu, la structure, le style
• en les planifiant à l’avance
• en interceptant des événements (souris, clavier,
doigts...)
5
Fondamentaux de JavaScript
Mais également (API HTML5) :
• d’échanger avec un serveur (AJAX)
• de dessiner (canvas - bitmap - ou svg - vectoriel)
• de se géolocaliser
• d’enregistrer localement du contenu (cache ou bdd)
• de jouer des fichiers audio ou video
• etc...
6
Fondamentaux de JavaScript
3 façons d’exécuter du code JavaScript
• En l’incorporant dans du HTML
<script> ......... </script>
• En le liant à du HTML
<script src="js/fichier.js"></script>
• Directement dans la console du navigateur
Dans Firefox : CTRL+MAJ+K (ALT+CMD+K sur Mac)
7
Fondamentaux de JavaScript
3 instructions pour démarrer
• Afficher une boite sommaire avec un message
alert("Bonjour !");
• Écrire du texte dans la console (pour débugguer)
console.log("Texte d'essai");
• Écrire quelque chose dans le document,
dans une balise HTML qui a un certain id
document.getElementById("monId")
.innerHTML = "<p>Mon contenu</p>";
8
exemple01.js
Notion de fonction
Un ensemble d’instructions prêt à être utilisé
après sa déclaration.
• Permet la ré-utilisabilité du code
• Deux temps : la déclaration, puis l’appel
• Peut avoir des paramètres (ici id et message)
9
// déclaration de la fonction
function afficher(id, message)
{
console.log("Message: " + message);
document.getElementById(id).innerHTML = message;
}
// deux exemples d'appel
afficher("special1", "<p>Du contenu bien frais !</p>");
afficher("special2", "Un autre contenu.");
Notion de fonction
• Peut retourner une valeur avec return.
10
// déclaration d'une autre fonction
function perimetre(longueur, largeur)
{
! return 2 * (longueur + largeur);
}
// appel imbriqué des deux fonctions précédentes
afficher("special3",
"Périmètre du rectangle : " + perimetre(100, 40)
);
exemple02.js
Notion de fonction
• Peut être déclarée et appelée du même coup.
Dans ce cas, le nom est souvent omis.
Penser aux parenthèses.
11
// déclaration de la fonction suivi de l’appel
(function(id, message) {
console.log("Message: " + message);
document.getElementById(id).innerHTML = message;
} ("special4", "Un dernier contenu."));
exemple02.js
Opérateurs 12
+ Addition de nombres et concaténation de chaînes
= Affectation de valeur à une variable
== Comparaison large (conversion à la volée)
- * / % (x - x % y) / y Division
entière
=== Comparaison stricte (sans conversion de type)
> < >= <=
x ? y : z Si x == true, vaut y sinon vaut z
Reste de la
division entière
Division
flottante
Structures de contrôle 13
if(expr) { ... } if(expr) { ... } else { ... }
if(expr) { ... } else if { ... } else if { ... } ... else { ... }
while(expr) { ... }
switch(expr) { case value1 : ... case value2 : ... default : ... }
do { ... } while(expr)
break
for(ini ; cond ; iter) { ... }
Notion de variable
Une variable est un emplacement nommé de la
mémoire, auquel on associe une donnée
• Ici : monMessage contient le texte « <p>Du contenu
bien frais !<p> »
• On la déclare avec var et on peut la réutiliser partout
après.
14
// déclaration d'une variable
var monMessage = "<p>Du contenu bien frais !</p>";
// utilisation avec la fonction précédente
afficher("bloc1", monMessage);
afficher("bloc2", monMessage);
Notion de type (début)
Dans une variable, on peut stocker pour l’instant :
• Un booléen (true ou false)
• Une chaîne de caractères
• Un nombre
• Ou une fonction
15
// déclaration de trois variables
var monMessage = "<p>Du contenu bien frais !</p>";
var monNombre = 17.2;
var maFonction = function(id, message)
{
console.log("Message: " + message);
document.getElementById(id).innerHTML = message;
}
// utilisation
maFonction("bloc1", monMessage);
Notion de type (début)
Types simples :
• Booléen
• Chaîne de caractères
• Nombre
Conversion en type simple :
• parseInt, parseFloat
• String
16
var x = 17;
var y = 18.2;
var c = "bonjour";
var d = "15.25";
alert(x + parseInt(d));
alert(x + parseFloat(d));
alert(string(x) + c);
// Résultats :
// 32
// 32.25
// 17bonjour
Le type « fonction » 17
Puisque « fonction » est un type de données en
JavaScript, on peut :
• le passer en paramètre d’une fonction
• le renvoyer comme valeur d’une fonction
(slides suivants)
Le type « fonction »
Ici, la fonction « afficher » est un callback :
elle est passée en paramètre d’une autre fonction,
au même titre que n’importe quel autre paramètre.
18
function afficher(message) {
console.log("Message: " + message);
document.getElementById("info").innerHTML = message;
}
function calculerEtAfficher(cote, affichage) {
var resultat = 4 * cote;
affichage("Périmètre du carré : " + resultat);
}
calculerEtAfficher(10, afficher);
exemple03.js
Le type « fonction »
Ici, « creeAffichage » est une « usine à fonctions » :
elle crée une fonction à la demande, que l’on peut
stocker, réutiliser, passer en paramètre, etc.
19
function creeAffichage(id) {
return function(message) {
console.log("Message: " + message);
document.getElementById(id).innerHTML = message;
}
}
creeAffichage("info1")("Du contenu tout frais !");
calculerEtAfficher(10, creeAffichage("info2"));
exemple04.js
Notion de visibilité 20
Une fois qu’une variable est déclarée, elle n’est pas
nécessairement visible (utilisable) en tous les
endroits du script.
Il y a plusieurs règles de visibilité en JavaScript.
(slides suivants)
Notion de visibilité
Règle 1
Une variable déclarée à l’extérieur d’une fonction ou
sans le mot-clé var est dite globale, et visible partout
après sa définition.
21
var globale1 = 17;
globale2 = 18;
function maFonction() {
globale3 = 19;
var locale = 20;
alert(globale1 + globale2 + globale3 + locale); // ok
}
alert(globale3); // erreur
maFonction();
alert(globale3); // ok
Notion de visibilité
Règle 2
Une variable non globale est dite locale.
Elle n’est accessible que dans la fonction où elle est
définie...
22
// déclaration d'une fonction
function maFonction()
{
var monMessage = "<p>Du contenu bien frais !</p>";
document.getElementById(id).innerHTML = monMessage;
}
maFonction(); // ok : exécute la fonction
alert(monMessage); // undefined : la variable monMessage
// n'est pas accessible ici
Notion de visibilité
Règle 2
...y compris dans les fonctions créées dans le contexte.
23
// déclaration d'une fonction
function afficheur(id)
{
var monMessage = "<p>Du contenu bien frais !</p>";
return function() {
document.getElementById(id).innerHTML = monMessage;
}
}
var disp = afficheur("bloc");
disp(); // ok
Notion de visibilité : fermetures
Règle 3
On appelle fermeture d’une fonction (closure)
l’ensemble des variables qui lui sont visibles au
moment de sa déclaration, globales et locales.
La fermeture d’une fonction F est visible quel que soit le
moment de l’appel de F, même si l’appel a lieu en
dehors du contexte de déclaration de F.
24
// déclaration d'une fonction
function afficheur(id)
{
var monMessage = "<p>Du contenu bien frais !</p>";
return function() {
document.getElementById(id).innerHTML = monMessage;
}
}
Notion de visibilité : fermetures
Ici la fermeture de la fonction interne (anonyme) est
{ id, monMessage }.
La fonction est créée à l’intérieur de afficheur, mais elle
sera appelée à l’extérieur. Sa fermeture sera alors
quand même visible.
25
// déclaration d'une fonction
function afficheur(id)
{
var monMessage = "<p>Du contenu bien frais !</p>";
return function() {
document.getElementById(id).innerHTML = monMessage;
}
}
Exemple
Question : affichage final ?
26
function externe()
{
! var a = 7;
! var interne = function()
! {
! ! alert(a);
! }
! a = 8;
! return interne;
}
externe()();
exemple05.js
Exemple
Réponse : 8.
La fermeture, c’est
l’environnement des variables
qui existent au moment de la
création de la fonction. Leurs
valeurs sont les dernières
valeurs connues au moment de
l’appel.
27
function externe()
{
! var a = 7;
! var interne = function()
! {
! ! alert(a);
! }
! a = 8;
! return interne;
}
externe()();
Notion d’objet
JavaScript supporte la notion d’objet :
• objet = attributs + méthodes
voiture = { marque, modele } + { accelerer, freiner }
En première approche, il n’y a pas vraiment de
distinction entre attribut et méthode :
• une méthode est un attribut de type fonction
• on dispose de la variable this
28
Notion de constructeur d’objet
Toute fonction appelée avec new est un constructeur
d’objet et peut donc utiliser this.
On peut utiliser this dans toutes les fonctions. En dehors
d’un contexte d’objet, this représente l’espace global.
29
function Voiture(marque, modele) {
! this.marque = marque;
! this.modele = modele;
! this.afficher = function() {
! ! alert(this.marque + " " + this.modele);
! }
}
var maVoiture = new Voiture("Ford", "Fiesta");
maVoiture.afficher();
console.log(maVoiture.marque);
Accès aux membres 30
// Accès aux attributs et méthodes
console.log(maVoiture.marque);
maVoiture.afficher();
// Ajout de membre a posteriori
maVoiture.km = 8000;
maVoiture.rouler = function(distance) {
! this.km += distance;
}
// Utilisation des crochets
alert( maVoiture["km"] );
• Tous les membres d’un objet sont publics.
• On peut ajouter des membres a posteriori.
• Utilisation de l’opérateur . (point) et des [] (crochets).
• On peut mettre une variable entre les crochets (de
type chaîne de caractères...)
exemple06.js
Format JSON
Exemple en utilisant la syntaxe JSON
~ couples clés/valeurs
Très pratique, à utiliser abondamment.
31
// déclaration d'un objet selon la syntaxe JSON
var monObjet = {
"nom" : "Fred",
"age" : 28,
"afficher" : function(id) {
document.getElementById(id).innerHTML = this.nom;
}
};
// utilisation de l'attribut nom
alert(monObjet.nom);
// utilisation de la méthode afficher
monObjet.afficher("bloc");
Format JSON
Syntaxe JSON (JavaScript Object Notation) :
• liste de couples attributs/valeurs dans une paire de { }
• notez les séparateurs (deux-points et virgules)
• guillemets conseillés pour les attributs mais non
obligatoires (ici : nom, age, afficher)
32
// déclaration d'un objet selon la syntaxe JSON
var monObjet = {
"nom" : "Fred",
"age" : 28,
"afficher" : function(id) {
document.getElementById(id).innerHTML = this.nom;
}
};
Discussion
Ici les méthodes sont dupliquées en mémoire.
Lorsque plusieurs objets ayant la même structure
doivent être construits, on préfère utiliser la notion de
prototype (slides suivants).
33
function affichageObjet(id) {
document.getElementById(id).innerHTML = this.nom;
}
var monObjet1 = {
"nom" : "Fred",
"afficher" : affichageObjet
};
var monObjet2 = {
"nom" : "Paul",
"afficher" : affichageObjet
};
Notion de prototype
Un constructeur C peut être associé à un prototype P,
qui est un objet «modèle». Tous les objets construits
avec C possèdent alors les membres de P.
34
function Voiture(marque, modele) {
! this.marque = marque;
! this.modele = modele;
}
Voiture.prototype.afficher = function() {
! alert(this.marque + " " + this.modele);
}
var maCaisse1 = new Voiture("Ford", "Fiesta");
var maCaisse2 = new Voiture("Renault", "Espace");
maCaisse1.afficher();
maCaisse2.afficher();
exemple07.js
Notion d’héritage
On peut simuler un héritage en JavaScript :
• Le prototype est un objet « modèle »
• Donc le prototype du fils doit être
une instance du père, à laquelle on ajoute des
membres spécifiques
• Et le constructeur du fils doit appeler celui du père
Opérateur instanceof :
console.log( maVoiture instanceof Voiture ); // true
35
exemple08.js
Voir
Structure de contrôle for..in
Pour itérer sur chacun des membres d’un objet :
• L’ordre de l’itération est non fiable
• Ne pas ajouter de membres à l’objet pendant
l’itération
• Passe en revue les attributs et les méthodes
36
for( var prop in maVoiture ) {
! console.log( prop + ": " + maVoiture[prop] );
}
Structure de contrôle for..in
Pour itérer sur chacun des membres d’un objet :
• Attributs et méthodes
• Y compris les membres « hérités » par prototype
• Dans un ordre non spécifié
• Ne pas ajouter de membres à l’objet pendant
l’itération
37
var maCaisse = new Voiture("Ford", "Fiesta");
for(var prop in maCaisse) {
! console.log( prop + ": " + maCaisse[prop] );
}
exemple09.js
Structure de contrôle for..in
• Il est possible de distinguer les membres «propres»
de ceux qui viennent du prototype.
38
var maCaisse = new Voiture("Ford", "Fiesta");
for(var prop in maCaisse) {
! if( maCaisse.hasOwnProperty(prop) ) {
! ! console.log( prop + ": " + maCaisse[prop] );
! }
}
exemple09.js
Notion de tableau
JavaScript propose un constructeur de tableaux
• Utilisation des crochets pour l’accès
• Propriété length pour avoir le nombre d’éléments
39
var monTableau = new Array();
monTableau[0] = "Toto";
monTableau[1] = 17;
monTableau[2] = true;
monTableau[4] = "hello";
console.log(monTableau.length + " éléments :");
for(var i = 0; i < monTableau.length; i++) {
! console.log(monTableau[i]);
}
// Ici monTableau[3] == undefined
exemple10.js
Tableau au format JSON
Syntaxe raccourcie pour la déclaration d’un tableau
• Utilisation des crochets pour la déclaration
(au lieu des accolades pour les objets)
40
// déclaration d'un tableau selon la syntaxe JSON
var monTableau = [
"Fred",
"Gina",
"Mehdi"
];
// les éléments sont numérotés à partir de zéro
alert(monTableau[0]); // Fred
// nombre d'éléments dans le tableau
alert(monTableau.length); // 3
Notion de type (fin)
Types de données :
• Undefined
• Booléen
• Chaîne de caractères
• Nombre
• Fonction
• Objet
• (Tableau) = objet particulier
41
// déclaration de quatre variables
var monMessage = "<p>Du contenu bien frais !</p>";
var monNombre = 17.2;
var maFonction = function(id, message) {
document.getElementById(id).innerHTML = message;
}
var monObjet = {
"nom" : "Fred",
"diplomes" : ["BAC", "BTS", "IMI"],
"afficher" : function(id) {
document.getElementById(id).innerHTML = this.nom;
}
}
Objets natifs du navigateur
window
• l’objet racine
• toute variable globale est un attribut de window
• var x = 0; <=> window.x = 0;
en contexte global
42
Objets natifs du navigateur
document
• représente le document actuellement affiché
• possède un certain nombre de méthodes et d’objets
sous-jacents documentés par le W3C :
le DOM (Document Object Model)
• exemple :
document.getElementById("monId").innerHTML
= "<p>Mon contenu</p>";
43
Objets natifs du navigateur
console
• la console de debuggage (CTRL+MAJ+K)
• exemple :
console.log("Texte d'essai");
44
Objets natifs du navigateur
Math
• un objet agrégeant des fonctions mathématiques
• exemple :
var x = Math.round(18.22);
45
Timeouts
Un timeout est une fonction qui s’exécutera
périodiquement ou au bout d’un temps défini.
• se déclare avec setInterval ou setTimeout
• s’annule avec clearInterval
46
function action() {
! alert("Tadam !");
}
// Toutes les 1000 millisecondes, Tadam !
var timeout = setInterval(action, 1000);
// Au bout de 3500 millisecondes, on arrete ça.
setTimeout(
! function() {
! ! clearTimeout(timeout);
! },
! 3500
);
exemple11.js
Résumé : notions abordées
Types en JavaScript
• Undefined
• Simples : booléen, nombre, chaîne
• Complexes : fonction, objet(, tableau)
Notions
• Visibilité des variables et fermeture
• Objet, prototype
• Syntaxe JSON
• Objets natifs : window, document, console, Math...
• Timeouts
47
Encore un exemple
Question : quel affichage dans la console ?
48
function makeFunctions()
{
! var arr = new Array();
! for(var i = 0; i < 5; i++) {
! ! arr[i] = function(j) {
! ! ! console.log(i+j);
! ! }
! }
! return arr;
}
var f = makeFunctions();
f[2](10);
Merci ! 49
Questions, commentaires, etc...
Contactez-moi sur Twitter : @novlangue

Contenu connexe

Tendances

Cours langage c
Cours langage cCours langage c
Cours langage ccoursuniv
 
Java 8 - collections et stream
Java 8 - collections et streamJava 8 - collections et stream
Java 8 - collections et streamFranck SIMON
 
Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Aziz Darouichi
 
Functional Programming 101 with Scala and ZIO @FunctionalWorld
Functional Programming 101 with Scala and ZIO @FunctionalWorldFunctional Programming 101 with Scala and ZIO @FunctionalWorld
Functional Programming 101 with Scala and ZIO @FunctionalWorldJorge Vásquez
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications JavaAntoine Rey
 
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...Edureka!
 
Python-oop
Python-oopPython-oop
Python-oopRTS Tech
 
Chapitre6: Surcharge des opérateurs
Chapitre6:  Surcharge des opérateursChapitre6:  Surcharge des opérateurs
Chapitre6: Surcharge des opérateursAziz Darouichi
 
Cours formulaire html - niveau débutant
Cours formulaire html - niveau débutantCours formulaire html - niveau débutant
Cours formulaire html - niveau débutantTheBest Icanbe
 
Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfFadouaBouafifSamoud
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en PythonABDESSELAM ARROU
 
16717 functions in C++
16717 functions in C++16717 functions in C++
16717 functions in C++LPU
 
Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)rezgui mohamed
 
Collection v3
Collection v3Collection v3
Collection v3Sunil OS
 

Tendances (20)

Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Cours langage c
Cours langage cCours langage c
Cours langage c
 
Cours java
Cours javaCours java
Cours java
 
Java 8 - collections et stream
Java 8 - collections et streamJava 8 - collections et stream
Java 8 - collections et stream
 
Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références
 
Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
 
TP C++ : enoncé
TP C++ : enoncéTP C++ : enoncé
TP C++ : enoncé
 
Functional Programming 101 with Scala and ZIO @FunctionalWorld
Functional Programming 101 with Scala and ZIO @FunctionalWorldFunctional Programming 101 with Scala and ZIO @FunctionalWorld
Functional Programming 101 with Scala and ZIO @FunctionalWorld
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
 
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
 
Python-oop
Python-oopPython-oop
Python-oop
 
Chapitre6: Surcharge des opérateurs
Chapitre6:  Surcharge des opérateursChapitre6:  Surcharge des opérateurs
Chapitre6: Surcharge des opérateurs
 
Cours formulaire html - niveau débutant
Cours formulaire html - niveau débutantCours formulaire html - niveau débutant
Cours formulaire html - niveau débutant
 
Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdf
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
 
16717 functions in C++
16717 functions in C++16717 functions in C++
16717 functions in C++
 
JavaScript
JavaScriptJavaScript
JavaScript
 
Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)
 
Collection v3
Collection v3Collection v3
Collection v3
 

En vedette (7)

Cours javascript
Cours javascriptCours javascript
Cours javascript
 
Php
PhpPhp
Php
 
INITIATION_JAVASCRIPT_NAB_2009
INITIATION_JAVASCRIPT_NAB_2009INITIATION_JAVASCRIPT_NAB_2009
INITIATION_JAVASCRIPT_NAB_2009
 
Advanced html5
Advanced html5Advanced html5
Advanced html5
 
Cours javascript v1
Cours javascript v1Cours javascript v1
Cours javascript v1
 
Java script ppt
Java script pptJava script ppt
Java script ppt
 
Programmation sous Android
Programmation sous AndroidProgrammation sous Android
Programmation sous Android
 

Similaire à Notions de base de JavaScript

Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryneuros
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJean-Pierre Vincent
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDOAbdoulaye Dieng
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mareValtech
 
Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Ruau Mickael
 
Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Engineor
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech daysJean-Pierre Vincent
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptMicrosoft
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web5pidou
 
Mettez du temps réel dans votre Drupal avec Node JS
Mettez du temps réel dans votre Drupal avec Node JSMettez du temps réel dans votre Drupal avec Node JS
Mettez du temps réel dans votre Drupal avec Node JSMatthieu Guillermin
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptMicrosoft Technet France
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech daysJean-Pierre Vincent
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoftdavrous
 
AOP.pptx
AOP.pptxAOP.pptx
AOP.pptxManalAg
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !Paris Salesforce Developer Group
 

Similaire à Notions de base de JavaScript (20)

Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOP
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mare
 
Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?
 
Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech days
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web
 
Cours java script
Cours java scriptCours java script
Cours java script
 
Mettez du temps réel dans votre Drupal avec Node JS
Mettez du temps réel dans votre Drupal avec Node JSMettez du temps réel dans votre Drupal avec Node JS
Mettez du temps réel dans votre Drupal avec Node JS
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScript
 
Johnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScriptJohnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScript
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech days
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoft
 
AOP.pptx
AOP.pptxAOP.pptx
AOP.pptx
 
Php1
Php1Php1
Php1
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
 

Notions de base de JavaScript

  • 1. JavaScript : concepts de base Kristen Le Liboux Juillet 2013
  • 2. Avertissements Notions abordées • Variables, fonctions, callbacks, fermetures (closures) • Types, objets, tableaux, prototypes • JSON Public visé • Déjà familier avec quelques notions de programmation • Opérateurs (+, *, ...) et structures de contrôle (if, while, ...) supposés connus 2
  • 3. Télécharger les exemples Cet indicateur fait référence aux exemples qui accompagnent cette présentation : Vous pouvez les télécharger sur : https://github.com/kleliboux/code-samples 3 exemple01.js
  • 4. Fondamentaux de JavaScript Langage de programmation : • scripté (interprété) pas de compilateur à proprement parler • côté client s’exécute dans un navigateur en général (il existe des environnements côté serveur : NodeJS) • asynchrone plusieurs « morceaux » peuvent s’exécuter en // 4
  • 5. Fondamentaux de JavaScript Dans un navigateur, permet : • de spécifier des changements sur le document : • après son chargement, • au cours de sa vie dans la fenêtre du navigateur, • sur le contenu, la structure, le style • en les planifiant à l’avance • en interceptant des événements (souris, clavier, doigts...) 5
  • 6. Fondamentaux de JavaScript Mais également (API HTML5) : • d’échanger avec un serveur (AJAX) • de dessiner (canvas - bitmap - ou svg - vectoriel) • de se géolocaliser • d’enregistrer localement du contenu (cache ou bdd) • de jouer des fichiers audio ou video • etc... 6
  • 7. Fondamentaux de JavaScript 3 façons d’exécuter du code JavaScript • En l’incorporant dans du HTML <script> ......... </script> • En le liant à du HTML <script src="js/fichier.js"></script> • Directement dans la console du navigateur Dans Firefox : CTRL+MAJ+K (ALT+CMD+K sur Mac) 7
  • 8. Fondamentaux de JavaScript 3 instructions pour démarrer • Afficher une boite sommaire avec un message alert("Bonjour !"); • Écrire du texte dans la console (pour débugguer) console.log("Texte d'essai"); • Écrire quelque chose dans le document, dans une balise HTML qui a un certain id document.getElementById("monId") .innerHTML = "<p>Mon contenu</p>"; 8 exemple01.js
  • 9. Notion de fonction Un ensemble d’instructions prêt à être utilisé après sa déclaration. • Permet la ré-utilisabilité du code • Deux temps : la déclaration, puis l’appel • Peut avoir des paramètres (ici id et message) 9 // déclaration de la fonction function afficher(id, message) { console.log("Message: " + message); document.getElementById(id).innerHTML = message; } // deux exemples d'appel afficher("special1", "<p>Du contenu bien frais !</p>"); afficher("special2", "Un autre contenu.");
  • 10. Notion de fonction • Peut retourner une valeur avec return. 10 // déclaration d'une autre fonction function perimetre(longueur, largeur) { ! return 2 * (longueur + largeur); } // appel imbriqué des deux fonctions précédentes afficher("special3", "Périmètre du rectangle : " + perimetre(100, 40) ); exemple02.js
  • 11. Notion de fonction • Peut être déclarée et appelée du même coup. Dans ce cas, le nom est souvent omis. Penser aux parenthèses. 11 // déclaration de la fonction suivi de l’appel (function(id, message) { console.log("Message: " + message); document.getElementById(id).innerHTML = message; } ("special4", "Un dernier contenu.")); exemple02.js
  • 12. Opérateurs 12 + Addition de nombres et concaténation de chaînes = Affectation de valeur à une variable == Comparaison large (conversion à la volée) - * / % (x - x % y) / y Division entière === Comparaison stricte (sans conversion de type) > < >= <= x ? y : z Si x == true, vaut y sinon vaut z Reste de la division entière Division flottante
  • 13. Structures de contrôle 13 if(expr) { ... } if(expr) { ... } else { ... } if(expr) { ... } else if { ... } else if { ... } ... else { ... } while(expr) { ... } switch(expr) { case value1 : ... case value2 : ... default : ... } do { ... } while(expr) break for(ini ; cond ; iter) { ... }
  • 14. Notion de variable Une variable est un emplacement nommé de la mémoire, auquel on associe une donnée • Ici : monMessage contient le texte « <p>Du contenu bien frais !<p> » • On la déclare avec var et on peut la réutiliser partout après. 14 // déclaration d'une variable var monMessage = "<p>Du contenu bien frais !</p>"; // utilisation avec la fonction précédente afficher("bloc1", monMessage); afficher("bloc2", monMessage);
  • 15. Notion de type (début) Dans une variable, on peut stocker pour l’instant : • Un booléen (true ou false) • Une chaîne de caractères • Un nombre • Ou une fonction 15 // déclaration de trois variables var monMessage = "<p>Du contenu bien frais !</p>"; var monNombre = 17.2; var maFonction = function(id, message) { console.log("Message: " + message); document.getElementById(id).innerHTML = message; } // utilisation maFonction("bloc1", monMessage);
  • 16. Notion de type (début) Types simples : • Booléen • Chaîne de caractères • Nombre Conversion en type simple : • parseInt, parseFloat • String 16 var x = 17; var y = 18.2; var c = "bonjour"; var d = "15.25"; alert(x + parseInt(d)); alert(x + parseFloat(d)); alert(string(x) + c); // Résultats : // 32 // 32.25 // 17bonjour
  • 17. Le type « fonction » 17 Puisque « fonction » est un type de données en JavaScript, on peut : • le passer en paramètre d’une fonction • le renvoyer comme valeur d’une fonction (slides suivants)
  • 18. Le type « fonction » Ici, la fonction « afficher » est un callback : elle est passée en paramètre d’une autre fonction, au même titre que n’importe quel autre paramètre. 18 function afficher(message) { console.log("Message: " + message); document.getElementById("info").innerHTML = message; } function calculerEtAfficher(cote, affichage) { var resultat = 4 * cote; affichage("Périmètre du carré : " + resultat); } calculerEtAfficher(10, afficher); exemple03.js
  • 19. Le type « fonction » Ici, « creeAffichage » est une « usine à fonctions » : elle crée une fonction à la demande, que l’on peut stocker, réutiliser, passer en paramètre, etc. 19 function creeAffichage(id) { return function(message) { console.log("Message: " + message); document.getElementById(id).innerHTML = message; } } creeAffichage("info1")("Du contenu tout frais !"); calculerEtAfficher(10, creeAffichage("info2")); exemple04.js
  • 20. Notion de visibilité 20 Une fois qu’une variable est déclarée, elle n’est pas nécessairement visible (utilisable) en tous les endroits du script. Il y a plusieurs règles de visibilité en JavaScript. (slides suivants)
  • 21. Notion de visibilité Règle 1 Une variable déclarée à l’extérieur d’une fonction ou sans le mot-clé var est dite globale, et visible partout après sa définition. 21 var globale1 = 17; globale2 = 18; function maFonction() { globale3 = 19; var locale = 20; alert(globale1 + globale2 + globale3 + locale); // ok } alert(globale3); // erreur maFonction(); alert(globale3); // ok
  • 22. Notion de visibilité Règle 2 Une variable non globale est dite locale. Elle n’est accessible que dans la fonction où elle est définie... 22 // déclaration d'une fonction function maFonction() { var monMessage = "<p>Du contenu bien frais !</p>"; document.getElementById(id).innerHTML = monMessage; } maFonction(); // ok : exécute la fonction alert(monMessage); // undefined : la variable monMessage // n'est pas accessible ici
  • 23. Notion de visibilité Règle 2 ...y compris dans les fonctions créées dans le contexte. 23 // déclaration d'une fonction function afficheur(id) { var monMessage = "<p>Du contenu bien frais !</p>"; return function() { document.getElementById(id).innerHTML = monMessage; } } var disp = afficheur("bloc"); disp(); // ok
  • 24. Notion de visibilité : fermetures Règle 3 On appelle fermeture d’une fonction (closure) l’ensemble des variables qui lui sont visibles au moment de sa déclaration, globales et locales. La fermeture d’une fonction F est visible quel que soit le moment de l’appel de F, même si l’appel a lieu en dehors du contexte de déclaration de F. 24 // déclaration d'une fonction function afficheur(id) { var monMessage = "<p>Du contenu bien frais !</p>"; return function() { document.getElementById(id).innerHTML = monMessage; } }
  • 25. Notion de visibilité : fermetures Ici la fermeture de la fonction interne (anonyme) est { id, monMessage }. La fonction est créée à l’intérieur de afficheur, mais elle sera appelée à l’extérieur. Sa fermeture sera alors quand même visible. 25 // déclaration d'une fonction function afficheur(id) { var monMessage = "<p>Du contenu bien frais !</p>"; return function() { document.getElementById(id).innerHTML = monMessage; } }
  • 26. Exemple Question : affichage final ? 26 function externe() { ! var a = 7; ! var interne = function() ! { ! ! alert(a); ! } ! a = 8; ! return interne; } externe()(); exemple05.js
  • 27. Exemple Réponse : 8. La fermeture, c’est l’environnement des variables qui existent au moment de la création de la fonction. Leurs valeurs sont les dernières valeurs connues au moment de l’appel. 27 function externe() { ! var a = 7; ! var interne = function() ! { ! ! alert(a); ! } ! a = 8; ! return interne; } externe()();
  • 28. Notion d’objet JavaScript supporte la notion d’objet : • objet = attributs + méthodes voiture = { marque, modele } + { accelerer, freiner } En première approche, il n’y a pas vraiment de distinction entre attribut et méthode : • une méthode est un attribut de type fonction • on dispose de la variable this 28
  • 29. Notion de constructeur d’objet Toute fonction appelée avec new est un constructeur d’objet et peut donc utiliser this. On peut utiliser this dans toutes les fonctions. En dehors d’un contexte d’objet, this représente l’espace global. 29 function Voiture(marque, modele) { ! this.marque = marque; ! this.modele = modele; ! this.afficher = function() { ! ! alert(this.marque + " " + this.modele); ! } } var maVoiture = new Voiture("Ford", "Fiesta"); maVoiture.afficher(); console.log(maVoiture.marque);
  • 30. Accès aux membres 30 // Accès aux attributs et méthodes console.log(maVoiture.marque); maVoiture.afficher(); // Ajout de membre a posteriori maVoiture.km = 8000; maVoiture.rouler = function(distance) { ! this.km += distance; } // Utilisation des crochets alert( maVoiture["km"] ); • Tous les membres d’un objet sont publics. • On peut ajouter des membres a posteriori. • Utilisation de l’opérateur . (point) et des [] (crochets). • On peut mettre une variable entre les crochets (de type chaîne de caractères...) exemple06.js
  • 31. Format JSON Exemple en utilisant la syntaxe JSON ~ couples clés/valeurs Très pratique, à utiliser abondamment. 31 // déclaration d'un objet selon la syntaxe JSON var monObjet = { "nom" : "Fred", "age" : 28, "afficher" : function(id) { document.getElementById(id).innerHTML = this.nom; } }; // utilisation de l'attribut nom alert(monObjet.nom); // utilisation de la méthode afficher monObjet.afficher("bloc");
  • 32. Format JSON Syntaxe JSON (JavaScript Object Notation) : • liste de couples attributs/valeurs dans une paire de { } • notez les séparateurs (deux-points et virgules) • guillemets conseillés pour les attributs mais non obligatoires (ici : nom, age, afficher) 32 // déclaration d'un objet selon la syntaxe JSON var monObjet = { "nom" : "Fred", "age" : 28, "afficher" : function(id) { document.getElementById(id).innerHTML = this.nom; } };
  • 33. Discussion Ici les méthodes sont dupliquées en mémoire. Lorsque plusieurs objets ayant la même structure doivent être construits, on préfère utiliser la notion de prototype (slides suivants). 33 function affichageObjet(id) { document.getElementById(id).innerHTML = this.nom; } var monObjet1 = { "nom" : "Fred", "afficher" : affichageObjet }; var monObjet2 = { "nom" : "Paul", "afficher" : affichageObjet };
  • 34. Notion de prototype Un constructeur C peut être associé à un prototype P, qui est un objet «modèle». Tous les objets construits avec C possèdent alors les membres de P. 34 function Voiture(marque, modele) { ! this.marque = marque; ! this.modele = modele; } Voiture.prototype.afficher = function() { ! alert(this.marque + " " + this.modele); } var maCaisse1 = new Voiture("Ford", "Fiesta"); var maCaisse2 = new Voiture("Renault", "Espace"); maCaisse1.afficher(); maCaisse2.afficher(); exemple07.js
  • 35. Notion d’héritage On peut simuler un héritage en JavaScript : • Le prototype est un objet « modèle » • Donc le prototype du fils doit être une instance du père, à laquelle on ajoute des membres spécifiques • Et le constructeur du fils doit appeler celui du père Opérateur instanceof : console.log( maVoiture instanceof Voiture ); // true 35 exemple08.js Voir
  • 36. Structure de contrôle for..in Pour itérer sur chacun des membres d’un objet : • L’ordre de l’itération est non fiable • Ne pas ajouter de membres à l’objet pendant l’itération • Passe en revue les attributs et les méthodes 36 for( var prop in maVoiture ) { ! console.log( prop + ": " + maVoiture[prop] ); }
  • 37. Structure de contrôle for..in Pour itérer sur chacun des membres d’un objet : • Attributs et méthodes • Y compris les membres « hérités » par prototype • Dans un ordre non spécifié • Ne pas ajouter de membres à l’objet pendant l’itération 37 var maCaisse = new Voiture("Ford", "Fiesta"); for(var prop in maCaisse) { ! console.log( prop + ": " + maCaisse[prop] ); } exemple09.js
  • 38. Structure de contrôle for..in • Il est possible de distinguer les membres «propres» de ceux qui viennent du prototype. 38 var maCaisse = new Voiture("Ford", "Fiesta"); for(var prop in maCaisse) { ! if( maCaisse.hasOwnProperty(prop) ) { ! ! console.log( prop + ": " + maCaisse[prop] ); ! } } exemple09.js
  • 39. Notion de tableau JavaScript propose un constructeur de tableaux • Utilisation des crochets pour l’accès • Propriété length pour avoir le nombre d’éléments 39 var monTableau = new Array(); monTableau[0] = "Toto"; monTableau[1] = 17; monTableau[2] = true; monTableau[4] = "hello"; console.log(monTableau.length + " éléments :"); for(var i = 0; i < monTableau.length; i++) { ! console.log(monTableau[i]); } // Ici monTableau[3] == undefined exemple10.js
  • 40. Tableau au format JSON Syntaxe raccourcie pour la déclaration d’un tableau • Utilisation des crochets pour la déclaration (au lieu des accolades pour les objets) 40 // déclaration d'un tableau selon la syntaxe JSON var monTableau = [ "Fred", "Gina", "Mehdi" ]; // les éléments sont numérotés à partir de zéro alert(monTableau[0]); // Fred // nombre d'éléments dans le tableau alert(monTableau.length); // 3
  • 41. Notion de type (fin) Types de données : • Undefined • Booléen • Chaîne de caractères • Nombre • Fonction • Objet • (Tableau) = objet particulier 41 // déclaration de quatre variables var monMessage = "<p>Du contenu bien frais !</p>"; var monNombre = 17.2; var maFonction = function(id, message) { document.getElementById(id).innerHTML = message; } var monObjet = { "nom" : "Fred", "diplomes" : ["BAC", "BTS", "IMI"], "afficher" : function(id) { document.getElementById(id).innerHTML = this.nom; } }
  • 42. Objets natifs du navigateur window • l’objet racine • toute variable globale est un attribut de window • var x = 0; <=> window.x = 0; en contexte global 42
  • 43. Objets natifs du navigateur document • représente le document actuellement affiché • possède un certain nombre de méthodes et d’objets sous-jacents documentés par le W3C : le DOM (Document Object Model) • exemple : document.getElementById("monId").innerHTML = "<p>Mon contenu</p>"; 43
  • 44. Objets natifs du navigateur console • la console de debuggage (CTRL+MAJ+K) • exemple : console.log("Texte d'essai"); 44
  • 45. Objets natifs du navigateur Math • un objet agrégeant des fonctions mathématiques • exemple : var x = Math.round(18.22); 45
  • 46. Timeouts Un timeout est une fonction qui s’exécutera périodiquement ou au bout d’un temps défini. • se déclare avec setInterval ou setTimeout • s’annule avec clearInterval 46 function action() { ! alert("Tadam !"); } // Toutes les 1000 millisecondes, Tadam ! var timeout = setInterval(action, 1000); // Au bout de 3500 millisecondes, on arrete ça. setTimeout( ! function() { ! ! clearTimeout(timeout); ! }, ! 3500 ); exemple11.js
  • 47. Résumé : notions abordées Types en JavaScript • Undefined • Simples : booléen, nombre, chaîne • Complexes : fonction, objet(, tableau) Notions • Visibilité des variables et fermeture • Objet, prototype • Syntaxe JSON • Objets natifs : window, document, console, Math... • Timeouts 47
  • 48. Encore un exemple Question : quel affichage dans la console ? 48 function makeFunctions() { ! var arr = new Array(); ! for(var i = 0; i < 5; i++) { ! ! arr[i] = function(j) { ! ! ! console.log(i+j); ! ! } ! } ! return arr; } var f = makeFunctions(); f[2](10);
  • 49. Merci ! 49 Questions, commentaires, etc... Contactez-moi sur Twitter : @novlangue