Objets intégrés – Promises



Objets intégrés – Promises

1 0


cours-Javascript


On Github YannickBochatay / cours-Javascript

Javascript

présentation du langage

Yannick Bochatay (DP/MSP)

Historique

  • Créé par Brendan Eich en 1996
  • normalisé par ECMA en 1998
  • 3è édition en juin 2002
  • 5è édition en juin 2011
  • 6è édition en cours de développement

Un langage incompris

(Douglas Crockford)

  • nom ambigü
  • domaine d'action méconnu
  • utilisation (trop) répandue
  • confusion avec le DOM
  • etc

Son nom

Javascript is to Java what hamster is to ham
  • Confusion persistente avec Java
  • Suffixe "script" laissant croire à un sous-langage

Domaines d'action

Navigateurs évidemment, mais aussi :
  • Windows (Windows Scripting Host)
  • Flash (ActionScript)
  • Suite Adobe (Photoshop, Illustrator, etc)
  • Extensions des logiciels Mozilla (Firefox, Thunderbird)
  • Firefox OS (système d'exploitation pour mobiles)
  • Node.js, en pleine expansion.
  • etc

Javascript et DOM

Le DOM (Document Object Model) est très critiqué, mais c'est une bibliothèque implémentée dans les navigateurs, elle ne fait pas partie du coeur du langage.

Contrairement aux idées reçues, Internet Explorer s'est très vite conformé à la norme ECMAScript 3 (mais pas au DOM du W3C).

Aperçu

Le javascript est un langage orienté objet. Un programme javascript est un ensemble d’objets communicants entre eux. Un objet est une collection de propriétés. Une propriété (n’est pas mais) contient une valeur primitive ou un objet. Si cet objet est une fonction on parle alors d’une méthode.

Valeurs primitives

  • booléen
  • nombre
  • chaîne de caractère
  • undefined
  • null

Booléen

true ou false

Nombre

Nombres à virgule flottante sur 64 bits. Attention aux pièges que cela induit.

							
2.998e8 //notation scientifique possible
							
0.1 + 0.2 // ??

var nb = Math.pow(2,53);
(nb+1) - nb // ??
							
						

Chaîne de caractère

Délimitée indiféremment par des apostrophes (simple quote) ou des guillemets (double quote). L'antislash permet d'insérer des caractères spéciaux (apostrophe, tabulation, saut de ligne, etc).

							
							"toto"
							'toto'
							
							"l'après-midi"
							'l\'après-midi'
							
							'une "citation"'
							"une \"citation\""
							
							"un retour à la \n ligne"
							"pas de retour à la \\n ligne"
							
							"pas d'antislash : \ "
							"un antislash : \\ "
							
						

undefined

Valeur d'une variable dont aucune valeur n'a été attribuée.
							
							var toto;
							
							toto //undefined
							
						

null

Valeur qui représente l'absence intentionnelle de valeur
							
							var toto = null;
							
						

Objets intégrés

  • Object
  • Function
  • Array
  • String
  • Boolean
  • Number
  • Math
  • Date
  • RegExp
  • JSON
  • Error objects (Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError)

Variables

Règles pour les identifiants

  • commence par une lettre, un tiret bas (_) ou un dollar ($)
  • les caractères qui suivent peuvent être des chiffres (0 à 9)
  • sensible à la casse

Habitudes

  • camelCase : maVariable plutôt que ma_variable
  • les constructeurs (et uniquement eux) commencent par une majuscule

Mode strict

Variante restrictive. Introduit dans la 5ème édition pour palier certains problèmes.
  • Déclaration obligatoire des variables

String

Caractères spéciaux

\' apostrophe \" guillement \\ antislash \n saut de ligne \r retour chariot \t tabulation \b backspace \f saut de page

Identifiants

Conversion de type de données

Typage dynamique
						
var reponse = 42;
reponse = "toto";
						
					
Si des expressions impliquent des chaînes et des nombres avec l'opérateur +, les nombres sont convertis en chaînes
						
x = "La réponse est " + 42 // "La réponse est 42"
y = 42 + " est la réponse" // "42 est la réponse"					
						
					

Précédence des opérateurs

Précédence Type d'opérateur Associativité Opérateur 1 membre gauche . [] new droite new 2 appel de fonction gauche () 3 incrémentation n/a ++ decrémentation n/a -- 4 non-logique droite ! non-binaire droite ~ + unaire droite + négation unaire droite - typeof droite typeof void droite void delete droite delete 5 multiplication gauche * division gauche / modulo gauche % 6 addition gauche + soustraction gauche - 7 décalage binaire gauche << >> >>> 8 comparaison gauche < <= > >= in gauche in instanceof gauche instanceof 9 égalité gauche == != === !== 10 et-binaire gauche & 11 ou-exclusif-binaire gauche ^ 12 ou-binaire gauche | 13 et-logique gauche && 14 ou-logique gauche || 15 conditionnel droite ?: 17 affectation droite = += -= *= /= %= <<= >>= >>>= &= ^= |= 18 virgule gauche ,

ECMAScript 6

En cours de développement

Promises

Exemple simple

						
function sleep1s() {
   return new Promise(function(resolve,reject) {
      window.setTimeout(resolve,1000);
   });
}

function message() { window.alert("1s plus tard"); }

sleep1s().then(message);

sleep1s().then(message).then(sleep1s).then(message);
						
					

Bibliothèques

  • jQuery essentiellement pour le DOM
  • RequireJS pour structurer son code en modules

Frameworks

Sites utiles

Blogs conseillés

Sites à éviter