SlideShare une entreprise Scribd logo
1  sur  36
JavaScript
Bonnes pratiques, astuces, et cauchemars
JavaScript est un langage omniprésent dans le paysage du
développeur moderne. Aimé ou détesté, personne ne reste
indifférent face à ses qualités... et ses défauts!
Qui suis-je?
● Développeur chevronné depuis plus de 20 ans
● Entrepreneur, passionné du web, photographe amateur, père de deux filles, et gamer
● Suivez-moi sur Twitter: @fvilers
● Ou sur LinkedIn: https://www.linkedin.com/in/fvilers
● Et même sur Instagram: @fvilers
Un peu d’histoire
● En 1995, Netscape Communications recrute Brendan Eich
● L’entreprise décide de créer un langage de script qui complètera Java, avec une syntaxe similaire
● Brendan Eich écrit un prototype de JavaScript en 10 jours
Standardisation
● ECMAScript publié en juin 1997
● ECMAScript 2 publié en juin 1998
● ECMAScript 3 publié en décembre 1999
● Grosses divergences autour du standard ECMAScript 4 début 2000, durant la “guerre des
navigateurs”
● ECMAScript 3.1 publié en 2007 avec de vives oppositions contre ECMAScript 4 qui ne sera jamais
terminé
● Fin des oppositions en juillet 2008
● ECMAScript 3.1 devient ECMAScript 5 début 2009
● ECMAScript 5 publié en décembre 2009
Standardisation
● ECMAScript 6 (ECMAScript 2015) publié en juin 2015
● ECMAScript 7 (ECMAScript 2016) publié en juin 2016
● ECMAScript 8 (ECMAScript 2017) publié en juin 2017 (mal supporté à part V8)
● ECMAScript 9 (ECMAScript 2018) publié en juin 2018 (mal supporté à part V8)
Les qualités de JavaScript
● Support universel par tous les navigateurs modernes
● Langage impératif et structuré
● Dynamique
● Objet orienté (basé sur les prototypes)
● Fonctionnel
● Support des /expressions régulières/
Bizarreries
Vrai ou faux?
Les nombres
Les tableaux
Les expressions régulières
Les dates
Le point virgule
Les fonctions
Le langage
Bonnes pratiques
Variables et constantes
● Mot clé const pour définir une constante
● Mot clé let pour définir une variable
Fonctions
● Arrow functions
● Fonctions anonymes
● Utilisation du this local
Fonctions
● Paramètres optionnels
● Opérateur rest
Strings
● Interpolation de variables
● Interpolation personnalisée
Objets
● Création courte d’objet
● Création avec propriété dynamique
● Création avec fonctions
Affectation de variables
● Tableau
● Objet
● Avec valeur par défaut
● Paramètres de fonction
Classes
● Définition
● Héritage
● Membres statiques
● Getter/setter
Symboles
● Type de données unique et immuable permettant d’identifier facilement des propriétés
Map
● Holds key-value pairs
● Remember the original insertion order of the keys
● Any value may be used
Set
● Store unique values
● Any value may be used
Nouvelles méthodes
● Object.assign()
● Array
○ find()
○ findIndex()
○ filter()
● String
○ repeat()
○ startsWith()
○ endsWith()
○ includes()
Nouvelles méthodes
● Number
○ Number.isNan()
○ Number.isFinite()
○ Number.isSafeInteger()
○ Number.EPSILON
● Math
○ Math.trunc()
○ Math.sign()
Promesses
● Promise
● Promise.all()
● Promise.resolve()/Promise.reject()
Itérateurs
● Support du pattern “itérable” afin de produire une séquence finie (ou non) de résultats
Générateurs
Un type spécial d’itérateur fournissant une méthode de génération où le contrôle du flux peut être mis en
pause
Meta programmation
● Proxy
● Reflect
Internationalisation et localisation
● Intl.Collator
● Intl.NumberFormat
● Int.DateTimeFormat
Tableaux typés
● ArrayBuffer
● Uint32Array
● Uint8Array
● Float32Array
https://github.com/fvilers/devday-2018

Contenu connexe

Similaire à JavaScript: bonnes pratiques, astuces, et cauchemars

Enib cours c.a.i. web - séance #5 - langages alternatives dans la jvm
Enib   cours c.a.i. web - séance #5 - langages alternatives dans la jvmEnib   cours c.a.i. web - séance #5 - langages alternatives dans la jvm
Enib cours c.a.i. web - séance #5 - langages alternatives dans la jvmHoracio Gonzalez
 
ENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidement
ENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidementENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidement
ENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidementHoracio Gonzalez
 
Enib cours c.a.i. web - séance #5 - j’ai besoin d’une appli web rapidement !
Enib   cours c.a.i. web - séance #5 - j’ai besoin d’une appli web rapidement !Enib   cours c.a.i. web - séance #5 - j’ai besoin d’une appli web rapidement !
Enib cours c.a.i. web - séance #5 - j’ai besoin d’une appli web rapidement !Horacio Gonzalez
 
Gwt oxiane-novae-lr
Gwt oxiane-novae-lrGwt oxiane-novae-lr
Gwt oxiane-novae-lroxmed
 
Cours n°1.1-Introduction.pdf angularrrrr
Cours n°1.1-Introduction.pdf angularrrrrCours n°1.1-Introduction.pdf angularrrrr
Cours n°1.1-Introduction.pdf angularrrrrinesrdissi60
 
Rouabhi algiers meetup
Rouabhi algiers meetupRouabhi algiers meetup
Rouabhi algiers meetupSamir Rouabhi
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JSENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JSHoracio Gonzalez
 
10 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 810 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 8Microsoft
 
Enib cours c.a.i. web - séance #1 - html5 css3-js - 1
Enib   cours c.a.i. web - séance #1 - html5 css3-js - 1Enib   cours c.a.i. web - séance #1 - html5 css3-js - 1
Enib cours c.a.i. web - séance #1 - html5 css3-js - 1Horacio Gonzalez
 
Enib cours c.a.i. web - séance #5 : scala play! framework
Enib   cours c.a.i. web - séance #5 : scala play! frameworkEnib   cours c.a.i. web - séance #5 : scala play! framework
Enib cours c.a.i. web - séance #5 : scala play! frameworkHoracio Gonzalez
 
10 ans de Code (Agile Bordeaux 2019).pptx
10 ans de Code (Agile Bordeaux 2019).pptx10 ans de Code (Agile Bordeaux 2019).pptx
10 ans de Code (Agile Bordeaux 2019).pptxGuillaume Saint Etienne
 
Kevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NETKevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NETMSDEVMTL
 
Développer une Single Page Application HTML 5 pour tous les devices
Développer une Single Page Application HTML 5 pour tous les devices Développer une Single Page Application HTML 5 pour tous les devices
Développer une Single Page Application HTML 5 pour tous les devices Microsoft
 
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...Horacio Gonzalez
 
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...Normandy JUG
 
TechDays - Développer une single page application HTML5 - Version longue
TechDays - Développer une single page application HTML5 - Version longueTechDays - Développer une single page application HTML5 - Version longue
TechDays - Développer une single page application HTML5 - Version longueTouchify
 

Similaire à JavaScript: bonnes pratiques, astuces, et cauchemars (20)

Enib cours c.a.i. web - séance #5 - langages alternatives dans la jvm
Enib   cours c.a.i. web - séance #5 - langages alternatives dans la jvmEnib   cours c.a.i. web - séance #5 - langages alternatives dans la jvm
Enib cours c.a.i. web - séance #5 - langages alternatives dans la jvm
 
ENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidement
ENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidementENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidement
ENIB 2013-2014 - CAI Web #3: J’ai besoin d’une appli web rapidement
 
Enib cours c.a.i. web - séance #5 - j’ai besoin d’une appli web rapidement !
Enib   cours c.a.i. web - séance #5 - j’ai besoin d’une appli web rapidement !Enib   cours c.a.i. web - séance #5 - j’ai besoin d’une appli web rapidement !
Enib cours c.a.i. web - séance #5 - j’ai besoin d’une appli web rapidement !
 
Gwt oxiane-novae-lr
Gwt oxiane-novae-lrGwt oxiane-novae-lr
Gwt oxiane-novae-lr
 
The Future of Javascript
The Future of JavascriptThe Future of Javascript
The Future of Javascript
 
The future of JavaScript
The future of JavaScriptThe future of JavaScript
The future of JavaScript
 
Cours n°1.1-Introduction.pdf angularrrrr
Cours n°1.1-Introduction.pdf angularrrrrCours n°1.1-Introduction.pdf angularrrrr
Cours n°1.1-Introduction.pdf angularrrrr
 
Rouabhi algiers meetup
Rouabhi algiers meetupRouabhi algiers meetup
Rouabhi algiers meetup
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JSENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
 
10 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 810 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 8
 
Enib cours c.a.i. web - séance #1 - html5 css3-js - 1
Enib   cours c.a.i. web - séance #1 - html5 css3-js - 1Enib   cours c.a.i. web - séance #1 - html5 css3-js - 1
Enib cours c.a.i. web - séance #1 - html5 css3-js - 1
 
Enib cours c.a.i. web - séance #5 : scala play! framework
Enib   cours c.a.i. web - séance #5 : scala play! frameworkEnib   cours c.a.i. web - séance #5 : scala play! framework
Enib cours c.a.i. web - séance #5 : scala play! framework
 
10 ans de Code (Agile Bordeaux 2019).pptx
10 ans de Code (Agile Bordeaux 2019).pptx10 ans de Code (Agile Bordeaux 2019).pptx
10 ans de Code (Agile Bordeaux 2019).pptx
 
Kevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NETKevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NET
 
Développer une Single Page Application HTML 5 pour tous les devices
Développer une Single Page Application HTML 5 pour tous les devices Développer une Single Page Application HTML 5 pour tous les devices
Développer une Single Page Application HTML 5 pour tous les devices
 
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...
 
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
 
Native script
Native scriptNative script
Native script
 
_JCVFr
_JCVFr_JCVFr
_JCVFr
 
TechDays - Développer une single page application HTML5 - Version longue
TechDays - Développer une single page application HTML5 - Version longueTechDays - Développer une single page application HTML5 - Version longue
TechDays - Développer une single page application HTML5 - Version longue
 

Plus de Fabian Vilers

REST in peace avec GraphQL
REST in peace avec GraphQLREST in peace avec GraphQL
REST in peace avec GraphQLFabian Vilers
 
MEAN (Jeudis du Libre)
MEAN (Jeudis du Libre)MEAN (Jeudis du Libre)
MEAN (Jeudis du Libre)Fabian Vilers
 
Introduction au BDD (Behavior Driven Development)
Introduction au BDD (Behavior Driven Development)Introduction au BDD (Behavior Driven Development)
Introduction au BDD (Behavior Driven Development)Fabian Vilers
 
Introduction à meteor
Introduction à meteorIntroduction à meteor
Introduction à meteorFabian Vilers
 
Social Sitters Final Pitch
Social Sitters Final PitchSocial Sitters Final Pitch
Social Sitters Final PitchFabian Vilers
 

Plus de Fabian Vilers (10)

React live coding
React live codingReact live coding
React live coding
 
REST in peace avec GraphQL
REST in peace avec GraphQLREST in peace avec GraphQL
REST in peace avec GraphQL
 
MEAN (Jeudis du Libre)
MEAN (Jeudis du Libre)MEAN (Jeudis du Libre)
MEAN (Jeudis du Libre)
 
MEAN (DevFM)
MEAN (DevFM)MEAN (DevFM)
MEAN (DevFM)
 
Introduction au BDD (Behavior Driven Development)
Introduction au BDD (Behavior Driven Development)Introduction au BDD (Behavior Driven Development)
Introduction au BDD (Behavior Driven Development)
 
Introduction à meteor
Introduction à meteorIntroduction à meteor
Introduction à meteor
 
CQRS
CQRSCQRS
CQRS
 
Owin & katana
Owin & katanaOwin & katana
Owin & katana
 
TypeScript
TypeScriptTypeScript
TypeScript
 
Social Sitters Final Pitch
Social Sitters Final PitchSocial Sitters Final Pitch
Social Sitters Final Pitch
 

JavaScript: bonnes pratiques, astuces, et cauchemars

Notes de l'éditeur

  1. En profiter pour montrer une aberration en JavaScript.
  2. Ceci explique en grande partie les problèmes de compatibilité entre les différentes implémentations et navigateurs.
  3. Ceci explique en grande partie les problèmes de compatibilité entre les différentes implémentations et navigateurs.
  4. Démontrer ce qui est vrai et faux en JS (true/false, null, undefined, 0/1, empty string/’1’) et comparateurs stricts