SlideShare a Scribd company logo
1 of 140
Guide du développeur
au pays du JavaScript
      Christophe Jollivet
Christophe Jollivet

• Neurobiologiste
• Informaticien
• Homme de communauté

• @jollivetc
Sondages
Atwood Law

• «Any application that can be written in
  JavaScript, will eventually be written in
  JavaScript»
• http://www.codinghorror.com/blog/
  2007/07/the-principle-of-least-power.html
Histoire
Histoire
Histoire
Histoire
Histoire
Histoire
• Erreur en ligne XXX
• Erreur en ligne XXX
• Cela fait un moment que c’est le bazar mais
  là je ne m’en sors plus
La révélation
La révélation

• Projet en HTML 5
• De vrais développeurs JavaScript
• Des ateliers
«JavaScript is the only
language that people feel they
don’t need to learn to use it»
Doug Crockford
http://blog.movereem.nl/images/javascript-the-good-parts-the-definitive-guide.jpg
L’outillage
Navigateur


• Libre choix
• Outillage varie selon le navigateur
Debugger

• Points d’arrêts
• Inspection de variables
• Console
IDE


• Editeur de texte
• IDE
Langage
Le langage

• Types / Syntaxe
• Scope
• Object et héritage
Types
Types

• Faiblement typé
• number, string, boolean, null, undefined
• Object, function
typeof
typeof
typeof
typeof
Objet
Objet

• Container de propriétés avec un nom et
  une valeur
Objet

• Container de propriétés avec un nom et
  une valeur
• nom est une string y compris ""
Objet

• Container de propriétés avec un nom et
  une valeur
• nom est une string y compris ""
• propriété est n’importe quelle valeur sauf
  undefined
Déclaration objet
Déclaration objet
Déclaration objet
Déclaration objet
Déclaration objet
Accès aux valeurs
Fonction
Fonction
Arguments
Arguments
Arguments


• Il n’y a pas d’erreur si le nombre d’arguments
  et paramètres ne correspondent pas
Arguments


• Il n’y a pas d’erreur si le nombre d’arguments
  et paramètres ne correspondent pas
• arguments contient la liste des arguments
Arguments
apply


• Permet l’invocation d’une fonction en lui
  passant un contexte et des paramètres
Apply
Coercition de type
Coercition de type

• Forcer le type d’une variable
Coercition de type

• Forcer le type d’une variable
• == fait la coercition de type
Coercition de type

• Forcer le type d’une variable
• == fait la coercition de type
• === ne fait pas la coercition de type :
  évaluation de type
Coercition de type


• '1' ==1   TRUE

• '1'===1   FALSE
Coercition de type
Coercition de type

• false == 'false'   FALSE
Coercition de type

• false == 'false'   FALSE

• false == '0'       TRUE
Coercition de type

• false == 'false'   FALSE

• false == '0'       TRUE
• " trn " == 0    TRUE
Coercition de type

• false == 'false'        FALSE

• false == '0'            TRUE
• " trn " == 0         TRUE
• ",,," == new Array(4)   TRUE
Coercition de type

• false == undefined   FALSE
• false == null       FALSE
• null == undefined    TRUE
Coercition de type
Coercition de type


• if( foo === null || foo === undefined )
Coercition de type


• if( foo === null || foo === undefined )
• if( foo == null )
Coercition type
   (bonus)
Coercition type
        (bonus)

• foo=+foo
Coercition type
         (bonus)

• foo=+foo
• foo = parseInt(foo)
Coercition type
         (bonus)

• foo=+foo
• foo = parseInt(foo)
• foo = parseFloat(foo)
Coercition et
 transitivité
Coercition et
       transitivité

• 0 ==''   TRUE
Coercition et
       transitivité

• 0 ==''    TRUE

• 0 =='0'   TRUE
Coercition et
       transitivité

• 0 ==''    TRUE

• 0 =='0'   TRUE
• ''=='0'
Coercition et
       transitivité

• 0 ==''    TRUE

• 0 =='0'   TRUE
• ''=='0'   FALSE
Piège
Truthy et Falsy
Truthy et Falsy

• "foo" ou 1 sont TRUE
Truthy et Falsy

• "foo" ou 1 sont TRUE
• "", 0, null, undefined, NaN, void sont FALSE
Truthy et Falsy

• "foo" ou 1 sont TRUE
• "", 0, null, undefined, NaN, void sont FALSE
• if( array.length>0 ) équivalent à
  if( array.length )
Truthy et Falsy

• "foo" ou 1 sont TRUE
• "", 0, null, undefined, NaN, void sont FALSE
• if( array.length>0 ) équivalent à
  if( array.length )
• if( string ) équivalent à if( string !== ""   )
Valeur par défaut
Appel sécurisé
Point virgule
Point virgule

• Séparation d’expression
Point virgule

• Séparation d’expression
• Pas toujours obligatoire
Point virgule

• Séparation d’expression
• Pas toujours obligatoire
• Pose problème dans la minification
Point virgule

• Séparation d’expression
• Pas toujours obligatoire
• Pose problème dans la minification
• Grand débat sur quand il est nécessaire
Point virgule




https://github.com/twitter/bootstrap/issues/3057
Point virgule
Point virgule
Scope
Scope
Scope

• Syntaxe à « la C » avec bloc
Scope

• Syntaxe à « la C » avec bloc
• Le scope est la fonction
Scope

• Syntaxe à « la C » avec bloc
• Le scope est la fonction
• Déclaration de variable avec «var»
Scope

• Syntaxe à « la C » avec bloc
• Le scope est la fonction
• Déclaration de variable avec «var»
• /! déclaration automatique
Déclaration
Déclaration
Hoisting


• Déplace les déclarations en tête du bloc
Hoisting
Hoisting
Objet et héritage
Création d’objet
    Forme littérale
Création d’objet
    Constructeur
Création d’objet
      Piège
Création d’objet
                     Piège




Si pas de new -> this du constructeur est «global»,
           pas d’erreur ou de warning !
Problème
unRectangle      anotherRectangle

longueur             longueur
  largeur         largeur

  surface              surface
Problème
  Occupation mémoire
unRectangle      anotherRectangle

longueur             longueur
  largeur         largeur

  surface              surface
Héritage par prototype

• Un objet hérite directement d’un autre
  objet, il n’y a pas de notion de classe
• On place les objets communs dans le
  prototype pour la mémoire
Création d’objet
Solution
unRectangle              anotherRectangle

longueur                     longueur
  largeur                 largeur


               surface

              Prototype
Closure

• Une fonction objet contient :
 • une fonction (nom, paramètres, body)
 • une référence à l’environnement où elle a
    été créée (contexte)
Closure
Closure



•Pollution de Global
•Risque de collision de nom
•names est modifiable
Closure
Closure




•Lent car construction de names à chaque appel
Closure
Closure
Closure
Framework
Frameworks
Frameworks
http://addyosmani.github.com/todomvc/
Frameworks

• Fonctionnalités diverses
 • binding
 • routing
 • templating
 • ......
Frameworks

• Backbone
• KnockoutJS
• AngularJS
• ember.js
• Meteor
Supplément
Supplément

• Utilisation de lib
Supplément

• Utilisation de lib
• Dépendance / AMD
Supplément

• Utilisation de lib
• Dépendance / AMD
• Minification
Supplément

• Utilisation de lib
• Dépendance / AMD
• Minification
• CDN
Tests

• QUnit
• Jasmine
• JSTest
Qualité

• JsLint
 • attention cela fait mal.
 • utiliser dès le début avant les mauvaises
    habitudes !
• Sonar
Questions ?
Creative Commons
Attribution — You must attribute the work in the
manner specified by the author or licensor (but not in
any way that suggests that they endorse you or your use
of the work).

Noncommercial — You may not use this work for
commercial purposes.

Share Alike — If you alter, transform, or build upon
this work, you may distribute the resulting work only
under the same or similar license to this one.

More Related Content

What's hot

Les Promises en Javascript
Les Promises en JavascriptLes Promises en Javascript
Les Promises en JavascriptBenoit Zohar
 
Javascript pour les Développeurs WEB
Javascript pour les Développeurs WEBJavascript pour les Développeurs WEB
Javascript pour les Développeurs WEBAbbes Rharrab
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !VISEO
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieurFredy Fadel
 
Javascript les générateurs (generators)
Javascript   les générateurs (generators)Javascript   les générateurs (generators)
Javascript les générateurs (generators)Julien CROUZET
 
Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6Jean-Baptiste Vigneron
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6Julien CROUZET
 
Présentation JavaScript
Présentation JavaScriptPrésentation JavaScript
Présentation JavaScripttarkan_
 
Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScriptKristen Le Liboux
 
Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Guillaume Laforge
 
TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummiesMicrosoft
 
Cappuccino - ou comment créer une application web en 5 minutes
Cappuccino - ou comment créer une application web en 5 minutes Cappuccino - ou comment créer une application web en 5 minutes
Cappuccino - ou comment créer une application web en 5 minutes Geeks Anonymes
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovyguest6e3bed
 
Introduction à scala
Introduction à scalaIntroduction à scala
Introduction à scalaSOAT
 
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
 
Présentation (brève) de scala
Présentation (brève) de scalaPrésentation (brève) de scala
Présentation (brève) de scalaclem_simon
 
Tour d’horizon de scala
Tour d’horizon de scalaTour d’horizon de scala
Tour d’horizon de scalaBenoit Wilcox
 
Introduction TypeScript
Introduction TypeScriptIntroduction TypeScript
Introduction TypeScriptfelixbillon
 

What's hot (20)

Les Promises en Javascript
Les Promises en JavascriptLes Promises en Javascript
Les Promises en Javascript
 
Javascript pour les Développeurs WEB
Javascript pour les Développeurs WEBJavascript pour les Développeurs WEB
Javascript pour les Développeurs WEB
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
 
Javascript les générateurs (generators)
Javascript   les générateurs (generators)Javascript   les générateurs (generators)
Javascript les générateurs (generators)
 
Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6
 
Formation VBA Excel
Formation VBA ExcelFormation VBA Excel
Formation VBA Excel
 
Présentation JavaScript
Présentation JavaScriptPrésentation JavaScript
Présentation JavaScript
 
Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScript
 
Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013
 
TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummies
 
Cappuccino - ou comment créer une application web en 5 minutes
Cappuccino - ou comment créer une application web en 5 minutes Cappuccino - ou comment créer une application web en 5 minutes
Cappuccino - ou comment créer une application web en 5 minutes
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Introduction à scala
Introduction à scalaIntroduction à scala
Introduction à scala
 
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
 
Présentation (brève) de scala
Présentation (brève) de scalaPrésentation (brève) de scala
Présentation (brève) de scala
 
Ruby Pour RoR
Ruby Pour RoRRuby Pour RoR
Ruby Pour RoR
 
Tour d’horizon de scala
Tour d’horizon de scalaTour d’horizon de scala
Tour d’horizon de scala
 
Introduction TypeScript
Introduction TypeScriptIntroduction TypeScript
Introduction TypeScript
 

Similar to Guide javascript

Formation JavaScript - Guide de démarrage rapide
Formation JavaScript - Guide de démarrage rapideFormation JavaScript - Guide de démarrage rapide
Formation JavaScript - Guide de démarrage rapideTarek Jellali
 
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...Cyrille Grandval
 
Exploiter php 5
Exploiter php 5Exploiter php 5
Exploiter php 5halleck45
 
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...Duyhai Doan
 
Suivi qualité avec sonar pour php
Suivi qualité avec sonar pour phpSuivi qualité avec sonar pour php
Suivi qualité avec sonar pour phpGabriele Santini
 
Langage Java et Programmation Orienté Objet
Langage Java et Programmation Orienté ObjetLangage Java et Programmation Orienté Objet
Langage Java et Programmation Orienté ObjetMohammed Jaafar
 
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPIndustrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPhalleck45
 
I don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry piI don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry piadelegue
 
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...Normandie Web Xperts
 
L'Open Web en tant que pierre angulaire du développement multi-objets
L'Open Web en tant que pierre angulaire du développement multi-objetsL'Open Web en tant que pierre angulaire du développement multi-objets
L'Open Web en tant que pierre angulaire du développement multi-objetsThomas Bassetto
 
Bbd dans le flow nov.2012
Bbd dans le flow nov.2012Bbd dans le flow nov.2012
Bbd dans le flow nov.2012guillaumeagilr
 
YLT paris js - mars 2015
YLT paris js - mars 2015YLT paris js - mars 2015
YLT paris js - mars 2015gaelmetais
 
Scalar Types Hints
Scalar Types HintsScalar Types Hints
Scalar Types HintsDarkmira
 
Top 5 des meilleures façon d'améliorer ton code
Top 5 des meilleures façon d'améliorer ton codeTop 5 des meilleures façon d'améliorer ton code
Top 5 des meilleures façon d'améliorer ton codeEric De Carufel
 

Similar to Guide javascript (20)

Formation JavaScript - Guide de démarrage rapide
Formation JavaScript - Guide de démarrage rapideFormation JavaScript - Guide de démarrage rapide
Formation JavaScript - Guide de démarrage rapide
 
GetText / Rails - FR
GetText / Rails - FRGetText / Rails - FR
GetText / Rails - FR
 
GetText / Rails
GetText / RailsGetText / Rails
GetText / Rails
 
Langage C#
Langage C#Langage C#
Langage C#
 
Aiguisez votre c#
Aiguisez votre c#Aiguisez votre c#
Aiguisez votre c#
 
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
 
Exploiter php 5
Exploiter php 5Exploiter php 5
Exploiter php 5
 
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
 
Cours_Java.pdf
Cours_Java.pdfCours_Java.pdf
Cours_Java.pdf
 
Suivi qualité avec sonar pour php
Suivi qualité avec sonar pour phpSuivi qualité avec sonar pour php
Suivi qualité avec sonar pour php
 
Langage Java et Programmation Orienté Objet
Langage Java et Programmation Orienté ObjetLangage Java et Programmation Orienté Objet
Langage Java et Programmation Orienté Objet
 
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPIndustrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
 
I don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry piI don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry pi
 
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
 
L'Open Web en tant que pierre angulaire du développement multi-objets
L'Open Web en tant que pierre angulaire du développement multi-objetsL'Open Web en tant que pierre angulaire du développement multi-objets
L'Open Web en tant que pierre angulaire du développement multi-objets
 
Bbd dans le flow nov.2012
Bbd dans le flow nov.2012Bbd dans le flow nov.2012
Bbd dans le flow nov.2012
 
YLT paris js - mars 2015
YLT paris js - mars 2015YLT paris js - mars 2015
YLT paris js - mars 2015
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Scalar Types Hints
Scalar Types HintsScalar Types Hints
Scalar Types Hints
 
Top 5 des meilleures façon d'améliorer ton code
Top 5 des meilleures façon d'améliorer ton codeTop 5 des meilleures façon d'améliorer ton code
Top 5 des meilleures façon d'améliorer ton code
 

Guide javascript

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. Javascript est utilisable du scientifique au non développeur. Pas besoin de compilateur, on le mets dans un page HTML et l’affiche directement.\nMauvaise réputation a cause de l’API DOM qui varie entre les navigateurs. Les libs JS simplifie le truc\n
  18. good parts 176 p\ndefinitive guide 1100 p\n\n\n
  19. \n
  20. \n
  21. \n
  22. \n
  23. JSFiddle Cloud9\n
  24. \n
  25. \n
  26. \n
  27. number string boolean null undefined sont types simple ie objet avec methodes mais immutable\nle reste est objet\n\nObjet en js est collection mutable à clé\n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. Déclaration littérale\n
  37. Déclaration littérale\n
  38. Déclaration littérale\n
  39. \n
  40. Noter le point virgule à la fin de la deuxième forme.\ndifference de couleur liée au global fonction ou global variable.\n\n\n
  41. le second affiche «Hello undefined»\n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. wrongName -> renvoie de undefined\nnull == undefined\n2 erreurs qui s’annulent !\n
  67. Attention null et undefined sont falsy mais null==false ou undefined == false sont false\n
  68. Attention null et undefined sont falsy mais null==false ou undefined == false sont false\n
  69. Attention null et undefined sont falsy mais null==false ou undefined == false sont false\n
  70. Attention null et undefined sont falsy mais null==false ou undefined == false sont false\n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. Quand le compilateur croise erreur cherche retour à la ligne et tente insertion point virgule\n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. noté le changement de couleur dans IntelliJ\n
  88. \n
  89. Affichage de 10\n
  90. \n
  91. \n
  92. \n
  93. \n
  94. Rectangle est en fond orange parce que IntelliJ a vu le constructeur sans new.\n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. names est Globlal :\n- pollution - collision\n- tout le monde peut modifier\n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. lib masque les différences entre les navigateurs\n
  112. lib masque les différences entre les navigateurs\n
  113. lib masque les différences entre les navigateurs\n
  114. lib masque les différences entre les navigateurs\n
  115. QUnit utiliser par JQuery\nJasmine intégration avec continuous Build\nJSTest support dans plugin sonar\n
  116. \n
  117. \n
  118. \n