Plai 06 JS01
Plai 06 JS01
Plai 06 JS01
Présentation (CSS)
Introduction au langage
JavaScript (1ère partie)
Philippe Genoud
[email protected]
https://www.w3schools.com/js/default.asp
https://www.fullstackac
https://octoverse.github.com/2022/top-programming-languages ademy.com/blog/nine-
best-programming-
languages-to-learn
https://youtu.be/uCyVa9_gUWs
Top languages
used in 2022
dernière modification 18/10/2023 © UGA-2023 Philippe GENOUD et bien d'autres encore https://tiobe.com/tiobe-index/
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 Array.protype.includes
(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...
https://caniuse.com/
http://kangax.github.io/compat-table/es6/
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 objet process,
objet document (DOM) objet fs (file system),
objets workers… objet os …
HelloWorld.html HelloWorld.php
<!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++) {
document.write("Hello World !</br>"); echo "Hello World !</br>";
} }
</script> ?>
</p> </p>
</body> </body>
</html> </html>
HelloWorld.php
GET HelloWorld.php
HelloWorld.html
GET HelloWorld.html
https://www.xenonstack.com/insights/guide-webassembly/
• 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 18/10/2023 © UGA-2023 Philippe GENOUD 23
WebAssembly
• exemples d'applications utilisant WebAssembly
https://earth.google.com/web/
https://www.figma.com/
*
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 *
https://www.youtube.com/watch?v=3LWgbjVWLug
WebAssembly and the Death of JavaScript ?
Colin Eberhardt (Scott Logic)
WebAssembly: How and why - Milica Mihajlija – Août 2018
https://blog.logrocket.com/webassembly-how-and-why-559b7f96cd71/
<head>
• peut être insérée soit dans l'entête (<head>) <script>
soit dans le corps (<body>) de la page HTML statement
</script>
monScript.js
for (j = 0; j < 5; j++) {
document.write("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
...
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
...
a = false;
console.log(typeof a); ---------------------------> boolean
a = {
nom : "Joe",
prenom : "Doe",
age : 34
};
console.log(typeof a); ----------------------------> object
a = null;
console.log(typeof a); ----------------------------> 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
• null
• La valeur spéciale null, n’appartient à aucun des types précédents, mais au type object
let jedi = null; jedi null
jedi est un variable particulière (une référence) qui permet de désigner un objet (regroupement de plusieurs
valeur primitives en une structure complexe).
Pour le moment elle ne désigne aucun objet particulier (mais comme son nom le laisse à penser, elle devrait être
utilisée ultérieurement pour désigner un objet représentant un guerrier Jedi)
nom 'Skywalker'
nom 'Skywalker' jedi
prénom 'Luke'
• pseudo objets
• 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)
méthode
propriété
'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 18/10/2023 © UGA-2023 Philippe GENOUD 49
Conversion automatique des types
• règles nombreuses et pas toujours intuitives
https://www.w3schools.com/js/js_type_conversion.asp
let x = 3; let x = 3;
x == 3 true
? x === 3 ?true
x == '3' true
? x === '3' ?false
• Valeur de l'expression a ?? b
- a : si a != undefined et a!= null
- b : sinon