Benjamin Chazelle
iut@chazelle.pro
36 heures (4h + 4x8h)
Jusqu'à mi-janvier
Évaluation par un projet
(promis j'essaye de ne pas vous surcharger)
iut@chazelle.pro
Tour d'horizon de JavaScript
Introduction à Vue.js
Concepts et syntaxes
Outils
Méthodologie
Bonnes pratiques
Pour aller plus loin
Benjamin Chazelle, 24 ans
Passionné d'informatique 💻
de musique 🎹 et de cuisine 🍪
IUT Bourg, DUT Info 2016
INSA Lyon, IF 2019
Ingénieur en développement
spécialisé front-end
Chez Ubitransport
Éditeur de logiciel pour le monde du transport de voyageur
www.kahoot.it
902 0522
Tour d'horizon
Langage pour le web (et +), interprété, orienté objet,
dynamique, typage faible,
riche en API
Standard et écosystème en évolution
JavaScript != Java
1995 - Créer par Brenden Eich chez Netscape/Mozilla
1997 - Standardiser comme ECMAScript (ES1)
2015 - Version majeur ES6 (ES2015)
Depuis 2015, une nouvelle version chaque année
ES6
OLD
Vue
Apparu avec ECMAScript 6
Usage déprécié
Fréquent dans l'usage de Vue.js
// index.html
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Apprenons JS</title>
<script src="script.js"></script>
</head>
<body>
</body>
</html>
// script.js
window.addEventListener("load", () => {
let body = document.body;
body.textContent = "Hello world";
});
OLD
// Commentaire monoligne
/*
Commentaire
multi
ligne
*/
let maVariable;
let maVariable;
maVariable; // undefined
let maVariable;
maVariable; // ?
let maVariable;
maVariable = "Hello world";
let maVariable;
maVariable = "Hello world";
maVariable // "Hello world"
let maVariable = "Hello world";
let maVariable = "Hello world";
let maVariable = "Bonjour le monde";
// Uncaught SyntaxError: redeclaration of let maVariable
Un nom de variable correct peut contenir :
- lettres minuscules (a-z)
- lettres majuscules (A-Z)
- chiffres (0-9)
- caractères dollar ($)
- caractères underscore (_)
Un nom de variable ne commence jamais par un chiffre.
good
GOOD
$Good
_good_
gôöd
b-a-d
-Bad-
84D
if(true) {
let x = 42;
x; // 42
}
x; // undefined
if(true) {
let x = 42;
x; // 42
}
x; // undefined
ES6
OLD
if(true) {
var x = 42;
x; // 42
}
x; // 42
function foo() {
let bar = 9;
if(bar > 0) {
let bar = 42;
}
bar; // ?
}
OLD
if(true) {
var x = 42;
x; // 42
}
x; // 42
if(true) {
let x = 42;
x; // 42
}
x; // undefined
ES6
OLD
function f() {
if(true) {
var x = 42;
x; // 42
}
x; // 42
}
x; // undefined
let x = 42; // 42
x = 1337;
// 1337
ES6
const x = 42; // 42
x = 1337;
// Uncaught TypeError: invalid assignment to const 'x'
ES6
Types objets (Object) |
---|
Object |
Array |
Set |
Map |
RegExp |
Function |
... |
Types primitifs |
---|
string |
number |
boolean |
null |
undefined |
symbol |
BigInt |
ES6
ES11
"hello"
1337
true
null
undefined
Symbol(42)
BigInt('1337')
[42, "Hello", true]
{ foo: "bar" }
function f() {}
let x = 1337;
x; // 1337
typeof x; // "number"
let x = 1337;
x; // 1337
typeof x; // "number"
x = new Date();
typeof x; // "object"
x = new Date();
typeof x; // "object"
x instanceof Date; // true
x instanceof RegExp; // false
let x = (2 + 13 - 7) * 2 / 4 % 5; // 4
let x = 2; // 2
x += 13; // 15
x -= 7; // 8
x *= 2; // 16
x /= 4; // 4
x %= 5; // 4
let x = 9;
x++; // 9;
x; // 10
let x = 9;
++x; // 10;
x; // 10
let x = 9;
x++; // 9;
x; // 10
let x = 56;
x--; // ?
x; // ?
let x = 9;
x--; // 9;
x; // 8
let x = 9;
--x; // 8;
x; // 8
let x = true && false; // false
let y = true || false; // true
let z = true || false && false; // true
// = true || (false && false)
let notZ = !z; // false
23 == 23; // true
23 == "23"; // true
0 == "0"; // true;
0 == false; // true;
0 == ""; // true;
23 === 23; // true
23 === "23"; // false
0 === "0"; // false;
0 === false; // false;
0 === ""; // false;
OLD
23 != 23; // false
23 != "23"; // false
0 != "0"; // false;
0 != false; // false;
0 != ""; // false;
23 !== 23; // false
23 !== "23"; // true
0 !== "0"; // true;
0 !== false; // true;
0 !== ""; // true;
OLD
let x = 42;
x < 32; // false
x <= 42; // true
x > 6; // true
17 >= x; // false
const couleur = "rose";
if(couleur === "rouge") {
peindre();
}
const couleur = "rose";
if(couleur === "rouge") {
peindre();
}
else {
console.log("Couleur indisponible");
}
const couleur = "rose";
if(couleur === "rouge") {
peindre();
}
else if(couleur === "rose") {
console.log("Rouge, rose, sur un malentendu vous savez...");
}
else {
console.log("Couleur indisponible");
}
const couleur = "rose";
if(couleur === "rouge") {
peindre();
}
else if(couleur === "rose") {
console.log("Rouge, rose, sur un malentendu vous savez...");
}
else if(couleur === "transparent") {
pasPeindre();
}
else {
console.log("Couleur indisponible");
}
const couleur = "rose";
switch(couleur) {
case "rouge":
peindre();
break;
default:
console.log("Couleur indisponible");
}
const couleur = "rose";
switch(couleur) {
case "rouge":
peindre();
break;
case "rose":
console.log("Rouge, rose, sur un malentendu vous savez...");
break;
default:
console.log("Couleur indisponible");
}
let i = 0;
while(i < 5) {
coupDePinceaux();
i++;
}
for(let i = 0; i < 5; i++) {
coupDePinceaux();
}
let a = 42;
let b = 3.;
let c = 3.14;
let d = -20;
let e = 10e5;
let f = 0x20; // 32
let g = Infinity;
let h = -Infinity;
let i = NaN;
// = Not a Number
let j = +0;
let h = -0;
42 / +0; // Infinity
42 / -0; // -Infinity
0.1 + 0.2; // 0.30000000000000004
IEEE 754
// De Number to String
const x = 42;
// Lisible
String(x); // "42"
// Performant
x + ""; // "42"
// De String à Number
const x = "42";
// Lisible
parseInt(x, 10); // 42
parseFloat(x); // 42
// Performant
+x; // 42
isFinite(42); // true
isFinite(Infinity); // false
isFinite(-Infinity); // false
isFinite(NaN); // false
isFinite("42"); // false
isNaN(42); // false
isNaN(Infinity); // false
isNaN(-Infinity); // false
isNaN(NaN); // true
isNaN("42"); // false
Math.round(100.7); // 101
Math.ceil(12.3); // 13
Math.floor(12.7); // 12
Math.random(); // 0
Math.PI; // 3.141592653589793
Math.cos(0); // 1
Math.min(2, 6); // 2
Math.max(2, 6); // 6
const x = "foo";
const y = 'bar';
const z = `qux`;
ES6
const x = "I'm your \"father\"";
const y = 'I\'m your "father"';
const z = `I'm your "father"`;
ES6
const x = "foo";
x[0]; // "f"
x[1]; // "o"
x[2]; // "o"
const x = "foo";
x.length; // 3
const x = "Saut de ligne\n";
const y = "Retour chariot\r";
const z = "Tabulation\t";
const x = "Veni";
const y = "vidi";
const z = "vici";
// Performant
x + " " + y + " " + z; // "Veni vidi vici"
// Lisible
`${x} ${y} ${z}`; // "Veni vidi vici"
ES6
true + " " + false + " " + null + " " + undefined + " " + NaN + " " + 0;
// "true false null undefined NaN 0"
const x = " JavaScript\n";
x.substring(4, 9); // "vaScr";
x.toUpperCase(); // " JAVASCRIPT\n"
x.toLowerCase(); // " javascript\n"
x.replace("a", "@"); // " J@vaScript\n";
x.indexOf("Java"); // 2
x.indexOf("Vue"); // -1
x.includes("Java"); // true
x.trim(); // "JavaScript";
ES6
const x = /^\d{4} \d{4} \d{4} \d{4}$/g; // Compact
const y = new RegExp("^\d{4} \d{4} \d{4} \d{4}$", "g"); // Performant
const x = "I love JavaScript, Vue.js, Vuex and Vue-router";
x.match(/[A-Z][^, ]+/g); // ["JavaScript", "Vue.js", "Vuex", "Vue-router"]
x.match(/\d/g); // null
let x = [1, 2, 3];
let y = ["Hello", true, 42, {foo: "bar"}];
let z = [[1,2,3], [4,5,6]];
let x = [1, 2, 3];
x[0]; // 1
let y = ["Hello", true, 42, {foo: "bar"}];
x[3]; // {foo: "bar"}
let z = [[1,2,3], [4,5,6]];
x[1]; // [4,5,6]
x[1][2]; // 6
let x = [1, 2, 3];
x[0] = 42;
x; // [42, 2, 3]
let x = [1, 2, 3];
x.length; // 3
let digits = [1, 2, 3];
for(let i = 0; i < digits.length; i++) {
// digits[i];
}
for(let digit of digits) {
// digit;
}
// Performance
digits.forEach(digit => {
// digit;
});
ES6
ES6
let x = [12, 3, 1, 150];
x.push(17); // Ajoute 17 en fin de tableau
x; // [12, 3, 1, 150, 17]
x.pop(); // 17 - Supprime et retourne le dernier élement
x; // [12, 3, 1, 150]
x.unshift(42); // Ajoute 17 en début de tableau
x; // [42, 12, 3, 1, 150]
x.shift(); // 42 - Supprime et retourne le premier élement
x; // [12, 3, 1, 150]
x.splice(1, 2); // [12, 150] - Supprime 2 éléments à la position 1
let x = [12, 3, 1, 150];
x.map(element => element * 2); // [24, 6, 2, 300]
x.reduce((acc, element) => acc + element) // 166
x.sort();
x; // [1, 12, 150, 3]
x.sort((a, b) => a - b);
x; // [1, 3, 12, 150]
let x = [12, 3, 1, 150];
x.indexOf(3); // 1 - Trouve l'index d'un élément
let x = [12, 3, 1, 150];
x.includes(3); // true - Indique la présence d'un élément
x.find(element => element === 3); // 3 - Trouve un élément
x.find(element => element === 0); // undefined
x.findIndex(element => element === 3); // 1 - Trouve l'index d'un élément
x.findIndex(element => element === 0); // undefined
x.filter(element => element < 10); // [3, 1] - Filtre les éléments
ES6
const [x, y] = [1, "foo"];
x; // 1
y; // "foo"
ES6
const [x, y, ...z] = [1, "foo", true, {}, 23];
x; // 1
y; // "foo"
z; // [true, {}, 23]
ES6
const [x, y, ...z] = [1, "foo", true, {}, 23];
x; // 1
y; // "foo"
z; // [true, {}, 23]
const reconstruit = [x, y, ...z];
// [1, "foo", true, {}, 23]
ES6
let x = {};
let y = new Object();
let x = {
firstname: "Benjamin",
lastname: "Chazelle",
age: 24,
engineer: true,
company: "Ubitransport"
};
let x = {
firstname: "Benjamin",
"lastname": "Chazelle",
age: 24,
'engineer': true,
company: "Ubitransport"
};
let x = {
firstname: "Benjamin",
lastname: "Chazelle",
age: 24,
engineer: true,
company: "Ubitransport"
};
x.age; // 24
x['company']; // "Ubitransport"
let infos = {
firstname: "Benjamin",
lastname: "Chazelle",
company: {
name: "Ubitransport",
city: "Mâcon",
creation: 2012
}
};
let x = {
firstname: "Benjamin",
lastname: "Chazelle",
age: 24,
engineer: true,
company: "Ubitransport"
};
x.age = 20;
x['company'] = "IUT Lyon 1";
x;
// {
// firstname: "Benjamin",
// lastname: "Chazelle",
// age: 20,
// engineer: true,
// company: "IUT Lyon 1"
// }
let x = {
firstname: "Benjamin",
company: {
name: "Ubitransport",
address: "200 Bd de la Résistance, 7100 Mâcon"
}
};
x.company.name; // "Ubitransport"
let x = {
firstname: "Benjamin",
company: {
name: "Ubitransport",
address: "200 Bd de la Résistance, 7100 Mâcon"
}
};
x.home; // undefined
x.home.address; // Uncaught TypeError: x.home is undefined
let x = {
firstname: "Benjamin",
company: {
name: "Ubitransport",
address: "200 Bd de la Résistance, 7100 Mâcon"
}
};
x.home; // undefined
x.home.address; // Uncaught TypeError: x.home is undefined
x?.home; // undefined
x?.home?.address; // undefined
ES6
let x = {
firstname: "Benjamin",
company: "Ubitransport"
};
"firstname" in x; // true
"phone" in x; // false
let x = {
firstname: "Benjamin",
company: "Ubitransport"
};
delete x.firstname;
x; // { company: "Ubitransport" }
let x = {
firstname: "Benjamin",
company: {
name: "Ubitransport",
address: "200 Bd de la Résistance, 7100 Mâcon"
}
};
Object.keys(x); // ["firstname", "company"]
Object.keys(x.company); // ["name", "address"]
let x = {
firstname: "Benjamin",
company: {
name: "Ubitransport",
address: "200 Bd de la Résistance, 7100 Mâcon"
}
};
// Historique
for(let property in x) {
// x[property];
}
// Performance
Object.keys(x).forEach(property => {
// x[property];
})
ES6
const firstname = "Benjamin";
const lastname = "Chazelle";
let x = {
firstname,
lastname
};
x;
// {
// firstname: "Benjamin",
// lastname: "Chazelle"
// }
Vue
ES6
const firstname = "Benjamin";
const contact = {
phone: "06 51 23 51 39",
email: "benjamin@chazelle.pro"
}
let x = {
firstname,
contact
};
x;
// {
// firstname: "Benjamin",
// contact: {
// phone: "06 51 23 51 39",
// email: "benjamin@chazelle.pro"
// }
// }
const firstname = "Benjamin";
const contact = {
phone: "06 51 23 51 39",
email: "benjamin@chazelle.pro"
}
let x = {
firstname,
...contact
};
x;
// {
// firstname: "Benjamin",
// phone: "06 51 23 51 39",
// email: "benjamin@chazelle.pro"
// }
Vue
ES6
const firstname = "Benjamin";
const contact = {
phone: "06 51 23 51 39",
email: "benjamin@chazelle.pro"
}
let x = {
firstname,
contact
};
x;
// {
// firstname: "Benjamin",
// contact = {
// phone: "06 51 23 51 39",
// email: "benjamin@chazelle.pro"
// }
// }
const width = 67;
const height = 23;
const dimensions
= { width, height }
const colour = "red";
const texture = "vinyle";
const data = {
colour,
texture: "iron",
...dimensions
}
data; // ?
// Triangle rouge
{
colour: "red",
texture: "vinyle",
dimensions: {
width: 67,
height: 23
}
}
// Rond jaune
{
colour: undefined,
texture: "iron",
width: 67,
height: 23
}
// Losange bleu
{
colour: "red",
texture: "iron",
width: 67,
height: 23
}
// Carré vert
{
colour: "red",
texture: "iron",
dimensions: {
width: 67,
height: 23
}
}
const firstname = "Benjamin";
const contact = {
phone: "06 51 23 51 39",
email: "benjamin@chazelle.pro"
}
let x = {
firstname,
contact
};
x;
// {
// firstname: "Benjamin",
// contact = {
// phone: "06 51 23 51 39",
// email: "benjamin@chazelle.pro"
// }
// }
let x = new Set();
x.add(42); // { 42 }
x.add("foo"); // { 42, "foo" }
x.has("foo"); // true
x.has(1337); // false
x.delete("foo");
x.size; // 1
for (let item of x) {
// items;
}
ES6
let x = new Map();
x.set(42, "quarante-deux'");
x.set("foo", "f o o");
x.size; // 2
x.get(42); // "quarante-deux";
x.get("foo") // "f o o"
x.delete("foo");
x.forEach((value, key) => {
// value;, key;
});
ES6
let a = new Date() // Maintenant
let b = new Date(1537621200000) // Milisecondes depuis l'epoch Unix
let c = new Date('2018-09-22T15:00:00+02:00') // Format ISO 8601
let d = new Date(2018, 8, 22) // Le mois est 0-indexé
ISO 8601
let x = new Date('2018-09-22T15:00:00+02:00')
x.getTime(); // 1537621200000
x.toLocaleDateString(); // "2018-9-22"
x.toLocaleTimeString(); // "15:00:00"
x.toISOString(); // "2018-09-22T13:00:00.000Z"
ISO 8601
let x = new Date('2018-09-22T15:00:00+02:00');
x.getDate(); // 22
x.setDate(30); // Date { 2018-09-30T13:00:00.000Z }
// Je vous épargne tout les getters/setters
let now = new Date().getTime();
let now = Date.now();
ES6
JSON est une syntaxe pour sérialiser des objets, tableaux, nombres, chaînes de caractères, booléens et valeurs null.
Elle est basée sur la syntaxe de JavaScript mais en est distincte : du code JavaScript n’est pas nécessairement du JSON, et du JSON n’est pas nécessairement du JavaScript.
{
firstname: "Benjamin",
'lastname': "Chazelle",
"age": 024,
"company": {
`hiring`: true,
"nextWebTalent": undefined
},
"confinedUntil": null,
"courses": ['JavaScript', "Vue.js"],
}
{
firstname: "Benjamin",
'lastname': 'Chazelle',
"age": 024,
"company": {
`hiring`: true,
"nextWebTalent": undefined
},
"confinedUntil": null,
"courses": ['JavaScript', "Vue.js"],
}
{
"firstname": "Benjamin",
"lastname": "Chazelle",
"age": 24,
"company": {
"hiring": true
},
"confinedUntil": null,
"courses": ["JavaScript", "Vue.js"]
}
let decoded = { firstname: 'Benjamin', age: 24, company: "Ubitransport" };
JSON.stringify(decoded);
// '{"firstname":"Benjamin","age":24,"company":"Ubitransport"}'
let encoded = '{"firstname":"Benjamin","age":24,"company":"Ubitransport"}';
JSON.parse(encoded);
// {
// firstname: 'Benjamin',
// age: 24,
// company: 'Ubitransport'
// }
function maFonction () {
}
function maFonction () {
}
maFonction(); // undefined
function maFonction () {
return 42;
}
maFonction(); // 42
function addition (a, b) {
return a + b;
}
addition(10, 7); // 17
function addition (a, b, c = 0) {
return a + b + c;
}
addition(10, 7); // 17
addition(10, 7, 100); // 117
const addition = function (a, b, c = 0) {
return a + b + c;
}
addition(10, 7); // 17
addition(10, 7, 100); // 117
const addition = (a, b, c = 0) => {
return a + b + c;
}
addition(10, 7); // 17
addition(10, 7, 100); // 117
ES6
const addition = (a, b, c = 0) => a + b + c;
addition(10, 7); // 17
addition(10, 7, 100); // 117
ES6
const majuscule = str => str.toUpperCase();
majuscule("hello world"); // "HELLO WORLD"
ES6
const casting = (a, b, ...plusEncore) => {
let liste = `${a} et ${b}`;
if(plusEncore.length > 0) {
liste += ` (et ${plusEncore.join(", ")})`;
}
return liste;
};
casting("Alice", "Bob");
// "Alice et Bob"
casting("Alice", "Bob", "Charlie", "Dan");
// "Alice et Bob (et Charlie, Dan)"
ES6
function exclamer(str) {
str += " !";
return str;
}
// Type primitif
let x = "Hello world";
exclamer(x); // "Hello world !"
x; // "Hello world"
x = exclamer(x);
x; // "Hello world !"
!!!
function exclamer(obj) {
obj.y += " !";
}
// Type objet
let x = {};
x.y = "Hello world";
exclamer(x);
x.y; // "Hello world !"
function () {
const phrase = "Houra";
const crier = function () {
console.log(phrase); // phrase est accessible
}
}
let x = {
argent: 25,
gagnerLoto: function () {
// ...
}
}
ES6
Vue
let y = {
argent: 25,
gagnerLoto: () => {
// ...
}
}
let z = {
argent: 25,
gagnerLoto() {
// ...
}
}
let x = {
argent: 25,
gagnerLoto: function () {
this; // === x
}
}
ES6
Vue
let y = {
argent: 25,
gagnerLoto: () => {
this; // !== y
}
}
let z = {
argent: 25,
gagnerLoto() {
this; // === z
}
}
let x = {
argent: 25,
gagnerLoto: function () {
this.argent = 10e6;
}
}
ES6
Vue
let y = {
argent: 25,
gagnerLoto: () => {
this.argent = 10e6;
// this ne cible pas y
}
}
let z = {
argent: 25,
gagnerLoto() {
this.argent = 10e6;
}
}
let x = {
argent: 25,
gagnerLoto: function () {
this.argent = 10e6;
}
}
x.gagnerLoto();
x.argent; // 10e6
ES6
Vue
let y = {
argent: 25,
gagnerLoto: () => {
this.argent = 10e6;
// this ne cible pas y
}
}
y.gagnerLoto();
y.argent; // 25
let z = {
argent: 25,
gagnerLoto() {
this.argent = 10e6;
}
}
z.gagnerLoto();
z.argent; // 10e6
this; // globalThis;
let x = {
gagnerLoto: () => {
this; // globalThis;
},
houra: function () {
this; // x
const crier = () => {
this; // x
console.log("Houra");
}
crier();
}
}
ES6
let x = {
argent: 25,
gagnerLoto: function () {
this.argent = 10e6;
}
}
let z = {
argent: 25,
gagnerLoto() {
this.argent = 350;
}
}
ES6
Vue
let volerLoto = x.gagnerLoto.bind(z);
volerLoto();
x.argent; // 25
z.argent; // 10e6
!!!
class Humain {
}
ES6
kevin = new Humain();
class Humain {
}
ES6
kevin = new Humain();
class Humain {
constructor(nom) {
this.nom = nom;
this.age = 0;
}
}
ES6
kevin = new Humain("Kevin");
class Humain {
constructor(nom) {
this.nom = nom;
this.age = 0;
}
vieillir() {
this.age++;
}
}
ES6
kevin = new Humain("Kevin");
kevin.vieillir();
class Humain {
constructor(nom) {
this.nom = nom;
this.langues =
["Anglais", "Italien"];
}
get langue() {
let langue = this.nom;
langue += " parle ";
langue += this.langues.join(" ");
return langue;
}
}
ES6
kevin = new Humain("Kevin");
kevin.langue;
// "Kevin parle Anglais Italien"
class Humain {
constructor(nom) {
this.nom = nom;
this.langues = [];
}
set langue(nom) {
this
.langues
.push(nom);
}
}
ES6
kevin = new Humain("Kevin");
kevin.langues;
// []
kevin.langue = "Anglais";
kevin.langues;
// ["Anglais"]
kevin.langue = "Italien";
kevin.langues;
// ["Anglais", "Italien"]
class Terrien {
constructor(age) {
this.planet = "Terre";
this.age = age;
}
}
class Humain extends Terrien {
constructor(age) {
super(age);
}
}
ES6
kevin = new Humain("Kevin");
kevin.planet; // "Terre"
class Humain {
static estHomoSapiens() {
return true;
}
}
ES6
Humain.estHomoSapiens(); // true
class Humain {}
let kevin = new Humain();
Humain.prototype.parler = function () {
console.log("Blah blah");
}
kevin.parler(); // > "Blah blah"
Vue
// condition ? siConditionVraie : siConditionFausse;
let x = age >= 18 ? "Majeur" : "Mineur";
const a = null || "default"; // "default"
const b = undefined || "default"; // "default"
const c = false || "default"; // "default"
const d = 0 || "default"; // "default"
const e = [] || "default"; // []
const f = "" || "default"; // "default"
const g = true || "default"; // true
const h = "foo" || "default"; // "foo"
ES11
const a = null ?? "default"; // "default"
const b = undefined ?? "default"; // "default"
const c = false ?? "default"; // false
const d = 0 ?? "default"; // 0
const e = [] ?? "default"; // []
const f = "" ?? "default"; // ""
const g = true ?? "default"; // true
const h = "foo" ?? "default"; // "foo"
try {
vivreTranquille();
} catch (e) {
if(e.message === "covid") {
seConfiner();
}
}
function vivreTranquile() {
// ...
throw new Error("covid");
// ...
}
Text
-
-
-
File
d'événements
document.body.addEventListener('click', () => {
alert("Hello world");
})
console.log("Le petit oiseau va sortir dans 2 secondes !")
setTimeout(() => {
console.log("Coucou !");
}, 2000);
let compteur = 10;
setInterval(() => {
if(compteur === 0) {
console.log("BOOM !")
}
else if(compteur > 0) {
console.log(compteur);
}
compteur--;
}, 1000);
let compteur = 10;
const interval = setInterval(() => {
if(compteur === 0) {
console.log("BOOM !")
clearInterval(interval);
}
console.log(compteur--);
}, 1000);
ES6
En attente
Résolue
Rejetée
ES6
En attente
Résolue
Rejetée
Si Matteo fournit un bon travail, il sera récompensé
ES6
En attente
Résolue
Rejetée
Matteo travail jusqu'à avoir un bon résultat ou bien ne plus pouvoir travailler
La mama est informée
Matteo est recompensé
const promise = new Promise((resolve, reject) => {
let matteoPeutTravailler = true;
let mauvaisResultat = true;
let resultat;
while(matteoPeutTravailler && mauvaisResultat) {
resultat = travaillerDur();
mauvaisResultat = evaluerTravail(resultat);
matteoPeutTravailler = estimerFatigue();
}
if(!mauvaisResultat) {
resolve(resultat);
} else {
reject("Abandon")
}
})
ES6
promise
.then(result => {
recompenserMatteo();
})
.catch(error => {
informerLaMama();
})
const promise = new Promise((resolve, reject) => {
let matteoPeutTravailler = true;
let mauvaisResultat = true;
let resultat;
while(matteoPeutTravailler && mauvaisResultat) {
resultat = travaillerDur();
mauvaisResultat = evaluerTravail(resultat);
matteoPeutTravailler = estimerFatigue();
}
if(!mauvaisResultat) {
resolve(resultat);
} else {
reject("Abandon")
}
})
ES6
async function () {
// Attendre le résultat
try {
let resultat = await promise;
} catch(e) {
e; // "Abandon"
}
}
const promise = new Promise((resolve, reject) => {
let result = tacheBloquante();
if(result) {
resolve(result);
} else {
reject("Requête impossible")
}
})
ES6
promise
.then(result => {
})
.catch(error => {
})
let maVariable = 42;
console.log(maVariable);
// > 42
console.log({maVariable});
// > { maVariable: 42 }
console.info("foo");
console.warn("bar");
console.error("qux");
// Effacer la console
console.clear();
// Afficher la pile d'appel
console.trace();
// Mesurer le temps
console.time("mesurer durée traitement");
console.timeEnd("mesurer durée traitement");
debugger;
// module.js
export default {
name: "Benjamin"
};
ES6
Vue
// main.js
import Module from "./module.js";
Module; // { name: "Benjamin" }
import AutreNom from "./module.js";
AutreNom; // { name: "Benjamin" }
// module.js
export default {
name: "Benjamin"
};
export const email = "iut@chazelle.pro";
ES6
Vue
// main.js
import Module from "./module.js";
Module; // { name: "Benjamin" }
import { email } from "./module.js";
email; // "iut@chazelle.pro"
// module.js
export default {
name: "Benjamin"
};
export const email = "iut@chazelle.pro";
let website = "chazelle.pro";
export website;
ES6
Vue
// main.js
import Module from "./module.js";
Module; // { name: "Benjamin" }
import { email } from "./module.js";
email; // "iut@chazelle.pro"
import { website as url } from "./module.js";
url; // "chazelle.pro"
// module.js
export default {
name: "Benjamin"
};
const email = "iut@chazelle.pro";
let website = "chazelle.pro";
export { email, website };
ES6
Vue
// main.js
import Module from "./module.js";
Module; // { name: "Benjamin" }
import { email, website as url } from "./module.js";
email; // "iut@chazelle.pro"
url; // "chazelle.pro"
// module.js
export default {
name: "Benjamin"
};
const email = "iut@chazelle.pro";
let website = "chazelle.pro";
export { email, website };
ES6
Vue
// main.js
import Module, { email, website as url } from "./module.js";
Module; // { name: "Benjamin" }
email; // "iut@chazelle.pro"
url; // "chazelle.pro"
// module.js
export default {
name: "Benjamin"
};
const email = "iut@chazelle.pro";
function share() {};
export { email, share };
ES6
Vue
// main.js
import Module, { email, share } from "./module.js";
Module; // { name: "Benjamin" }
email; // "iut@chazelle.pro"
share; // function share() {}
document.body;
// <body>
document.getElementById("titre");
// <input #titre>
document.querySelector("p");
// <p>
window.title;
// "Apprenons JS"
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Apprenons JS</title>
<script src="script.js"></script>
</head>
<body>
<h1>Hello world</h1>
<input id="titre" type="text" />
<button>Envoyer</button>
</body>
</html>
let input = document.querySelector("#titre");
// Valeur du champ
input.value;
input.getAttribute("type"); // "text"
input.setAttribute("type", "password");
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Apprenons JS</title>
<script src="script.js"></script>
</head>
<body>
<h1>Hello world</h1>
<input id="titre" type="text" />
<button>Envoyer</button>
</body>
</html>
let paragraph = document.querySelector("p");
paragraph.textContent;
// "Hello world"
paragraph.innerHTML;
// "Hello<br />world"
paragraph.outerHTML;
// "<p>Hello<br /world</p>"
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Apprenons JS</title>
<script src="script.js"></script>
</head>
<body>
<h1>Hello<br />world</h1>
<input id="titre" type="text" />
<button>Envoyer</button>
</body>
</html>
let bouton = document.querySelector("button");
bouton.addEventListener("click", () => {
alert("Clicked !");
});
// Il y a de nombreux événements écoutables
//
// mousedown, mouseup, mousemove, click, dblclick
// keydown, keyup, keypress
// scroll
// ...
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Apprenons JS</title>
<script src="script.js"></script>
</head>
<body>
<h1>Hello<br />world</h1>
<input id="titre" type="text" />
<button>Envoyer</button>
</body>
</html>
document.body;
// <body>
document.getElementById("titre");
// <input #titre>
document.querySelector("p");
// <p>
window.title;
// "Apprenons JS"
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Apprenons JS</title>
<script src="script.js"></script>
</head>
<body>
<h1>Hello world</h1>
<input id="titre" type="text" />
<button>Envoyer</button>
</body>
</html>
🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴
Canvas API | TypedArray | Ramasse-miette |
XHR | Video API | Mode strict |
Générateur | Buffer | Local sotrage |
Node | WebSocket | Fetch API |
BigInt | Worker | Notification |
iut@chazelle.pro