Introduction à JavaScript et son évolution
Introduction à JavaScript et son évolution
[Link]
[Link]
[Link]
[Link]
dernière modification 19/10/2022 © UGA-2022 Philippe GENOUD et bien d'autres encore [Link] ….
7
Quelques idées fausses
ECMAScript 4 ECMAScript 6*
JScript début des travaux let, const
(MS IE 3.0) classes et modules
ECMAScript 3 ECMAScript 4 Chrome
ECMAScript 2 abandon moteur ECMAScript 7
Javascript V8 opérateur **
ECMA-262 Ed.1 [Link]
(ECMAScript 1) ECMAScript 5
TC39 commitee mode strict ECMAScript 8
JSON async/wait
(Mai) Brendan Eich Mocha
(Sep.) Mocha LiveScript Node JS ECMAScript 9
(Dec.) LiveScript JavaScript basé sur V8 propriétés rest/spread,
(Netscape Navigator 2.0) de Chrome iteration asynchrone
ECMA: European Computer Manufacturers Association ajouts aux RegExp
ECMA-262: nom officiel du standard *à partir de 2015 les versions de ECMAScript sont numérotées par leur
ECMAScript: nom du langage année de publication ECMAScript 2015, ECMAscript 2016...
[Link]
[Link]
JavaScript
Engine
Chrome: V8
Environnement JS Environnement JS
Firefox: SpiderMonkey
Safari: WebKit
Core Core
Javascript Javascript
Javascript
ECMAScript Javascript
hébergé hébergé
(Embedded) (Embedded)
Environnement JS Environnement JS
Objets Objets
spécifiques spécifiques
objet global window modules [Link]
objet document (DOM) MongoDB, CouchDB
objets workers… …
[Link] [Link]
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<title>Hello world</title> <title>Hello world</title>
</head> </head>
<body> <body>
<h1>Hello</h1> <h1>Hello</h1>
<p> <p>
<script> <?php
for (i=0; i < 5; i++) { for ($i=0; $i < 5; $i++) {
[Link]("Hello World !</br>"); echo "Hello World !</br>";
} }
</script> ?>
</p> </p>
</body> </body>
</html> </html>
[Link]
GET [Link]
[Link]
GET [Link]
[Link]
• WebAssembly
- Nouveau type de code pouvant être exécuté dans les navigateurs modernes
- Format binaire compact, rapide à charger et à exécuter
performances proche du code natif
- Conçu pour être un cible de compilation efficace pour des langages source de bas
niveau (C, C++, Rust, …)
dernière modification 19/10/2022 © UGA-2022 Philippe GENOUD 23
WebAssembly
Assembleur : représente le langage machine
sous une forme textuelle lisible par un humain
*
Pour être exécutés les programmes écrits WebAssembly : pas un véritable langage
dans un langage de haut niveau doivent être d'assemblage
traduits en langage machine
.wat .wasm *
[Link]
WebAssembly and the Death of JavaScript ?
Colin Eberhardt (Scott Logic)
WebAssembly: How and why - Milica Mihajlija – Août 2018
[Link]
<head>
• peut être insérée soit dans l'entête (<head>) <script>
soit dans le corps (<body>) de la page HTML statement
</script>
[Link]
for (j = 0; j < 5; j++) {
[Link]("Bye Bye World !</br>");
}
valeur de la variable
'Hello World'
• bonnes pratiques
- choisir des noms descriptifs
• par exemple pour un variable correspondant à une moyenne on préfèrera moyenne à m
- ne pas hésiter à utiliser plusieurs mots pour décrire avec précision le rôle d’un variable
• par exemple pour une pour un variable correspondant à un prix unitaire d'un produit on préfèrera prixUnitaire à pu
- adopter des règles de nommage cohérentes dans tout le code
• Définir un glossaire, réutiliser les mêmes termes partout • Conserver les mêmes conventions d’écriture
user visitor user user
userName User_name userName userName
camel case
[Link](etud);
...
if (nbProduitsAchete >= 5) {
// appliquer un taux de réduction de 25 %
tauxTVA = 0.25;
}
...
...
if (nbProduitsAchete >= 5) {
// appliquer un taux de réduction de 25 %
tauxTVA = 0.25; une tentative de modification de la constante va provoquer une
} erreur d'exécution avec un message explicite sur la console
...
--------------------------> number
--------------------------> object
--------------------------> object
----------------> object
• string
• Représente des données textuelles (chaînes de caractères) encodées comme une séquence d’entiers
non signés sur 16 bits (2 octets) représentant une unité de code UTF-16
• Chaque lettre de la chaîne occupe une position définie par une position (index) : 0 pour la première
lettre, 1 pour la deuxième, …
• La longueur de chaîne (length) est le nombre d’unités de codes UTF-16 (mots de 2 octets).
• Ce n’est pas nécessairement le nombre de caractères Unicode (certains caractères exotiques peuvent être
codés sur plus de 2 octets).
• Expressions littérales pour les chaînes délimitées par des guillemets (quotes) : " ou ' ou `(backticks)
• undefined
• possède une unique valeur, undefined affectée à une variable déclarée dont le contenu n'a jamais
été initialisé.
let age; age undefined
• bien que les types number, string et boolean définissent des valeurs primitives directement
stockées dans une variable, ils possèdent néanmoins des propriétés et méthodes (on parle
parfois de pseudo objets) nombre 114
let nombre = 114;
chaine "114"
let chaine = [Link]();
let nbreChiffres = [Link]; nbreChiffres 3
dernière modification 19/10/2022 © UGA-2022 Philippe GENOUD 44
Types de base
• Type objet
• object
• variable ne contient plus une valeur mais un référence (adresse) vers un objet complexe (valeur non
primitive)
• un objet est défini par un ensemble de propriétés qui peuvent être soit des valeurs primitives, soit elles
même des objets
• en plus de propriétés, des fonctions spécifiques (méthodes) peuvent être définies pour un objet
• mais de tout cela on reparlera plus tard…
let jedi = {
nom : 'Skywalker',
let nom = 'Skywalker'; prenom: 'Luke';
}
nom 'Skywalker'
nom 'Skywalker' jedi
prénom 'Luke'
'50' * '20' 1000 les valeurs de type string sont converties en valeurs de type number
l'opérateur + est surchargé quand les opérandes sont de type number c'est l'addition, quand ils
'50' + '20' '5020' sont de type string c'est la concaténation de chaînes
l'un des opérandes est de type string + est la concaténation de chaînes, la valeur de type
'50' + 20 '5020' number est convertie en valeur type string
l'un des opérandes est de type string + est la concaténation de chaînes, la valeur de type
50 + '20' '5020'
number est convertie en valeur type string
'50' - 20 30 l'opérateur - est la soustraction, la valeur de type string est convertie en valeur type number
'50' + null '50null' la valeur null est convertie en la valeur 'null' de type string
50 + undefined NaN
dernière modification 19/10/2022 © UGA-2022 Philippe GENOUD 47
Conversion automatique des types
• règles nombreuses et pas toujours intuitives
[Link]
let x = 3; let x = 3;
x == 3 true
? x === 3 ?true
x == '3' true
? x === '3' ?false