Introduction au Web et à JavaScript
Romuald THION
Semestre printemps 2023-2024 UCBL
Hors motif impérieux, possible si vous donnez un-e camarade avec qui échanger.
Pour les motifs impérieux, j’affecterai d’office.
fetch
etc.) ?Les différents métiers du Web
Beaucoup de concepts, de technique et d’évolutions 😨
Appelées aussi verbes, cf. MDN
GET
: get a specific resourcePOST
: create a new resourcePUT
: update an existing resource (or
create)DELETE
: delete the specified resourceHEAD
: get the metadata information
GET
mais sans contenu (en-tête
seulement)TRACE
, OPTIONS
, CONNECT
,
PATCH
: avançéesCRUD | HTTP | SQL |
---|---|---|
create | POST |
INSERT |
read | GET |
SELECT |
update | PUT |
UPDATE |
delete | DELETE |
DELETE |
Langage de balises utilisé pour structurer le contenu d’un document destiné à être affiché par un navigateur.
Exemple https://csszengarden.com/.
Pour réviser les sélecteurs https://flukeout.github.io/ ou les Flexbox avec https://flexboxfroggy.com/.
#id
>> .class
>>
element
JavaScript (JS) is a lightweight interpreted (or JIT compiled) programming language with first-class functions. While it is most well-known as the scripting language for Web pages, many non-browser environments also use it, such as Node.js, […]. JavaScript is a prototype-based, multi-paradigm, single-threaded, dynamic language, supporting object-oriented, imperative, and declarative (e.g. functional programming) styles. (Source MDN)
[1, 2, 10, 11, 20].sort();
// 🤯 [ 1, 10, 11, 2, 20 ]
"b" + "a" + +"a" + "a";
// 🤯 'baNaNa'
NaN === NaN;
// 🤯 false
null == 0;
// false
null > 0;
// false
null >= 0;
// 🤯 true
Une grande partie des problèmes provient des nombreuses conversions implicites (typage faible).
Langages pour la programmation frontend :
JavaScript
, éventuellement transpilé depuis un
autre langage ou une version plus récente.
Langages pour la programmation backend : à
peu près tous : rust
, Go
, PhP
,
Java
, JavaScript
, Python
,
ruby
… Plus ou moins adapté selon les traits du langage.
throw .. catch .. finaly ..
)function funct(x) {
return x * x;
}
console.assert(typeof funct === "function");
console.assert(funct instanceof Object);
console.assert(funct instanceof Function);
console.assert(typeof [1, 2, 3] === "object");
console.assert([1, 2, 3] instanceof Object);
console.assert([1, 2, 3] instanceof Array);
// syntaxe usuelle
function adderFunction(x, y) {
return x + y;
}
console.assert(adderFunction(2, 3) === 5);
// expression fonctionnelle
const adderFunctExpr = function (x, y) {
return x + y;
};
console.assert(adderFunctExpr(2, 3) === 5);
// syntax fat arrows
const adderArrow = (x, y) => x + y;
console.assert(adderArrow(2, 3) === 5);
const adderCurry = (x) => (y) => x + y;
const adderCurryExplicite = function (x) {
return function (y) {
x + y;
};
};
console.assert(typeof adderCurry === "function");
console.assert(typeof adderCurry(2) === "function");
console.assert(typeof adderCurry(2)(3) === "number");
function fact(n) {
return n < 2 ? n : n * fact(n - 1);
}
console.assert(fact(6) === 720);
const isEven = (x) => x % 2 === 0;
const square = (x) => x * x;
const allSquaresOfEvensAreEvens = Array.from({ length: 8 })
.map((_, idx) => idx)
.filter(isEven)
.map(square)
.every(isEven);
console.assert(allSquaresOfEvensAreEvens);
const fact = (n) =>
Array.from({ length: n })
.map((_, idx) => idx + 1)
.reduce((acc, x) => acc * x, 1);
console.assert(fact(6) === 720);
const [a, b, ...rest] = [1, 2, 3, 4, 5];
console.debug(a, b, rest);
// swap Python style
let x = 42;
let y = 13;
[x, y] = [y, x];
console.assert(x === 13 && y === 42);
const obj = { name: "Romu", emoji: "😀", age: "42" };
const { age, emoji: icon, unk = false } = obj;
console.log(age, icon, unk);
function get({ age, name }) {
return `${name} is ${age}`;
}
Dit aussi asynchrone, voire concurrent coopératif
C’est un des traits principaux de JavaScript, qui le différencie de Python.
const event = new Event("greet");
const target = new EventTarget();
target.addEventListener("greet", (e) => {
console.log(`${JSON.stringify(e)} emmitted`);
});
target.dispatchEvent(event);
null
(à aviter) et
undefined
Boolean
Number
et BigInt
(taille arbitraire)String
immutableSymbol
(cas d’usage spécifique)Objets standards MDN - Standard built-in objects
var x;
var x = val;
let x;
let x = val;
: à
éviter
const x = val;
à privilégier