mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2025-08-06 14:56:54 +02:00
Merge pull request #2030 from antoin-m/master
[javascript/fr]: Add es6 updates to javascript
This commit is contained in:
@@ -6,6 +6,7 @@ contributors:
|
|||||||
filename: javascript-fr.js
|
filename: javascript-fr.js
|
||||||
translators:
|
translators:
|
||||||
- ['@nbrugneaux', 'https://nicolasbrugneaux.me']
|
- ['@nbrugneaux', 'https://nicolasbrugneaux.me']
|
||||||
|
- ['Michel Antoine', 'https://github.com/antoin-m']
|
||||||
lang: fr-fr
|
lang: fr-fr
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -23,6 +24,8 @@ interpréteur Javascript, basé sur le célèbre moteur V8 de Google Chrome,
|
|||||||
peut être utilisé directement côté serveur pour exécuter des programmes écrits
|
peut être utilisé directement côté serveur pour exécuter des programmes écrits
|
||||||
en JavaScript.
|
en JavaScript.
|
||||||
|
|
||||||
|
ECMAScript (la norme du langage Javascript) entre en version 6. Cette version introduit de nombreuses mises à jour tout en restant rétrocompatible. L'implémentation de ces nouvelles fonctionnalités est en cours et celles-ci ne sont donc pas forcément compatibles avec tous les navigateurs.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
// Les commentaires sont comme en C. Les commentaires mono-ligne commencent par 2 slashs,
|
// Les commentaires sont comme en C. Les commentaires mono-ligne commencent par 2 slashs,
|
||||||
/* et les commentaires sur plusieurs lignes commencent avec slash-étoile
|
/* et les commentaires sur plusieurs lignes commencent avec slash-étoile
|
||||||
@@ -79,6 +82,12 @@ false; // faux
|
|||||||
"abc";
|
"abc";
|
||||||
'Hello, world';
|
'Hello, world';
|
||||||
|
|
||||||
|
// *ES6:* Les chaines de caractères peuvent être crées en utilisant un modèle
|
||||||
|
// entouré des quotes inverses (`) à la place des quotes classiques (' ou ").
|
||||||
|
// Les variables sont interprétées avec ${var}
|
||||||
|
let banta = "Harry", santa = "Hermione";
|
||||||
|
`${banta}, your santa is ${santa}.` // = "Harry, your santa is Hermione."
|
||||||
|
|
||||||
// La négation utilise le symbole !
|
// La négation utilise le symbole !
|
||||||
!true; // = false
|
!true; // = false
|
||||||
!false; // = true
|
!false; // = true
|
||||||
@@ -124,9 +133,17 @@ undefined; // utilisé pour une valeur actuellement non présente (cependant,
|
|||||||
// est 'presque-vrai' (truthy)
|
// est 'presque-vrai' (truthy)
|
||||||
// Notez que 0 est falsy mais '0' est truthy, alors même que 0 == '0' (mais 0 !== '0')
|
// Notez que 0 est falsy mais '0' est truthy, alors même que 0 == '0' (mais 0 !== '0')
|
||||||
|
|
||||||
|
// *ES6:* Introduction d'un nouveau type primitif : Symbol
|
||||||
|
var symbol_one = Symbol();
|
||||||
|
var symbol_two = Symbol('This is optional description, for debugging');
|
||||||
|
typeof symbol_one === 'symbol' // = true
|
||||||
|
|
||||||
|
// *ES6:* Un Symbol est immutable et unique
|
||||||
|
Symbol() === Symbol() // = false
|
||||||
|
Symbol('learnx') === Symbol('learnx') // = false
|
||||||
|
|
||||||
///////////////////////////////////
|
///////////////////////////////////
|
||||||
// 2. Variables, Tableaux et Objets
|
// 2. Variables, Tableaux, Objets, Maps et Sets
|
||||||
|
|
||||||
// Les variables sont déclarées avec le mot clé var. Le typage en JavaScript est
|
// Les variables sont déclarées avec le mot clé var. Le typage en JavaScript est
|
||||||
// dynamique, donc pas besoin de spécifier le type. L'assignement utilise un seul =.
|
// dynamique, donc pas besoin de spécifier le type. L'assignement utilise un seul =.
|
||||||
@@ -145,6 +162,32 @@ var someThirdVar = undefined;
|
|||||||
|
|
||||||
// ... sont deux déclarations identiques.
|
// ... sont deux déclarations identiques.
|
||||||
|
|
||||||
|
// Il est possible de déclarer plusieurs variables en séparant leur déclaration
|
||||||
|
// avec l'opérateur virgule
|
||||||
|
var someFourthVar = 2, someFifthVar = 4;
|
||||||
|
|
||||||
|
// *ES6:* Les variables peuvent maintenant être déclarées avec les mots-clés
|
||||||
|
// `let` et `const`
|
||||||
|
let someSixthVar = 6;
|
||||||
|
const someSeventhVar = 7;
|
||||||
|
|
||||||
|
// *ES6:* Le mot-clé `let` attache la variable au block de code et non à la fonction
|
||||||
|
// à l'inverse de `var`
|
||||||
|
for (let i = 0; i < 10; i++) {
|
||||||
|
x += 10;
|
||||||
|
}
|
||||||
|
i; // = raises ReferenceError
|
||||||
|
|
||||||
|
// *ES6:* Les variables "const" doivent être assignées lors de l'initialisation
|
||||||
|
const someEighthVar = 7;
|
||||||
|
const someNinthVar; // raises SyntaxError
|
||||||
|
|
||||||
|
// *ES6:* Modifier une variable constante ne lève par d'erreur mais échoue
|
||||||
|
// silencieusement
|
||||||
|
const someNinthVar = 9;
|
||||||
|
someNinthVar = 10;
|
||||||
|
someNinthVar; // = 9
|
||||||
|
|
||||||
// Il y a des raccourcis pour les opérations mathématiques:
|
// Il y a des raccourcis pour les opérations mathématiques:
|
||||||
someVar += 5; // équivalent pour someVar = someVar + 5;
|
someVar += 5; // équivalent pour someVar = someVar + 5;
|
||||||
someVar *= 10; // de même, someVar = someVar * 100;
|
someVar *= 10; // de même, someVar = someVar * 100;
|
||||||
@@ -165,6 +208,22 @@ myArray.length; // = 4
|
|||||||
// Ajout/Modification à un index spécifique
|
// Ajout/Modification à un index spécifique
|
||||||
myArray[3] = 'Hello';
|
myArray[3] = 'Hello';
|
||||||
|
|
||||||
|
// *ES6:* Les Arrays peuvent maintenant être déstructurés en utilisant le pattern matching
|
||||||
|
var [a, b] = [1, 2];
|
||||||
|
var [a, , b] = [1, -2, 2]
|
||||||
|
|
||||||
|
a; // = 1
|
||||||
|
b; // = 2
|
||||||
|
|
||||||
|
// *ES6:* La déstructuration peut échouer silencieusement.
|
||||||
|
// Il est aussi possible d'utiliser des valeurs par défaut
|
||||||
|
var [a] = [];
|
||||||
|
a; // = undefined;
|
||||||
|
var [a = 1] = [];
|
||||||
|
a; // = 1;
|
||||||
|
var [a = 1] = [2];
|
||||||
|
a; // = 2;
|
||||||
|
|
||||||
// Les objets JavaScript sont appelés 'dictionnaires' ou 'maps' dans certains autres
|
// Les objets JavaScript sont appelés 'dictionnaires' ou 'maps' dans certains autres
|
||||||
// langages : ils sont une liste non-ordonnée de paires clé-valeur.
|
// langages : ils sont une liste non-ordonnée de paires clé-valeur.
|
||||||
var myObj = {key1: 'Hello', key2: 'World'};
|
var myObj = {key1: 'Hello', key2: 'World'};
|
||||||
@@ -179,12 +238,55 @@ myObj['my other key']; // = 4
|
|||||||
// .. ou avec un point si la clé est un identifiant valide.
|
// .. ou avec un point si la clé est un identifiant valide.
|
||||||
myObj.myKey; // = 'myValue'
|
myObj.myKey; // = 'myValue'
|
||||||
|
|
||||||
|
// *ES6:* Un Symbol peut être utilisé en tant que clé. Puisque ceux-ci sont uniques,
|
||||||
|
// le seul moyen d'accéder à la propriété est d'avoir une référence sur ce Symbol.
|
||||||
|
myObj["key"] = "public value";
|
||||||
|
myObj[Symbol("key")] = "secret value";
|
||||||
|
myObj[Symbol("key")]; // = undefined
|
||||||
|
|
||||||
// Les objets sont eux aussi modifiables.
|
// Les objets sont eux aussi modifiables.
|
||||||
myObj.myThirdKey = true;
|
myObj.myThirdKey = true;
|
||||||
|
|
||||||
// Si vous essayez d'accéder à une valeur non-définie, vous obtiendrez undefined
|
// Si vous essayez d'accéder à une valeur non-définie, vous obtiendrez undefined
|
||||||
myObj.myFourthKey; // = undefined
|
myObj.myFourthKey; // = undefined
|
||||||
|
|
||||||
|
// *ES6:* Comme les Arrays, les Objects peuvent être déstructurés en utilisant le pattern matching
|
||||||
|
var {foo} = {foo: "bar"};
|
||||||
|
foo // = "bar"
|
||||||
|
|
||||||
|
// *ES6:* Les Objects déstructurés peuvent utiliser des noms de variables différents
|
||||||
|
// de ceux d'origine grâce au pattern matching
|
||||||
|
var {foo, moo: baz} = {foo: "bar", moo: "car"};
|
||||||
|
foo // = "bar"
|
||||||
|
baz // = "car"
|
||||||
|
|
||||||
|
// *ES6:* Il est possible d'utiliser des valeurs par défaut lor de la déstructuration d'un Object
|
||||||
|
var {foo="bar"} = {moo: "car"};
|
||||||
|
foo // = "bar"
|
||||||
|
|
||||||
|
// *ES6:* Une erreur lors de la déstructuration restera silencieuse
|
||||||
|
var {foo} = {};
|
||||||
|
foo // = undefined
|
||||||
|
|
||||||
|
// *ES6:* Les Maps sont des objets itérables de type clé-valeur.
|
||||||
|
// Il est possible de créer une nouvelle map en utilisant `new Map()`
|
||||||
|
var myMap = new Map();
|
||||||
|
|
||||||
|
// *ES6:* Il est possible d'ajouter un couple clé-valeur avec la méthode `.set()`,
|
||||||
|
// de récupérer une valeur avec `.get()`,
|
||||||
|
// de vérifier qu'une clé existe avec `.has()`
|
||||||
|
// et enfin de supprimer un couple clé-valeur avec `.delete()`
|
||||||
|
|
||||||
|
myMap.set("name", "Douglas");
|
||||||
|
myMap.get("name"); // = "Douglas"
|
||||||
|
myMap.has("name"); // = true
|
||||||
|
myMap.delete("name");
|
||||||
|
|
||||||
|
// *ES6:* Les Sets sont des ensembles de valeurs uniques.
|
||||||
|
// Il est possible de créer un set avec `new Set()`.
|
||||||
|
// Toute valeur non unique est ignorée.
|
||||||
|
var mySet = new Set([1,2,2]);
|
||||||
|
console.log([...mySet]); // = [1,2]
|
||||||
|
|
||||||
///////////////////////////////////
|
///////////////////////////////////
|
||||||
// 3. Logique et structures de contrôle
|
// 3. Logique et structures de contrôle
|
||||||
@@ -218,6 +320,22 @@ for (var i = 0; i < 5; i++){
|
|||||||
// sera exécutée 5 fois
|
// sera exécutée 5 fois
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// La boucle for...in permet d'itérer sur les noms des propriétés d'un objet
|
||||||
|
var description = "";
|
||||||
|
var person = {fname:"Paul", lname:"Ken", age:18};
|
||||||
|
for (var x in person){
|
||||||
|
description += person[x] + " ";
|
||||||
|
}
|
||||||
|
description; // = "Paul Ken 18 "
|
||||||
|
|
||||||
|
// *ES6:* La boucle for...of permet d'itérer sur les propriétés d'un objet
|
||||||
|
var description = "";
|
||||||
|
var person = {fname:"Paul", lname:"Ken", age:18};
|
||||||
|
for (var x of person){
|
||||||
|
description += x + " ";
|
||||||
|
}
|
||||||
|
description; // = "Paul Ken 18 "
|
||||||
|
|
||||||
// && est le "et" logique, || est le "ou" logique
|
// && est le "et" logique, || est le "ou" logique
|
||||||
if (house.size === 'big' && house.colour === 'blue'){
|
if (house.size === 'big' && house.colour === 'blue'){
|
||||||
house.contains = 'bear';
|
house.contains = 'bear';
|
||||||
@@ -264,6 +382,20 @@ function myFunction(thing){
|
|||||||
}
|
}
|
||||||
myFunction('foo'); // = 'FOO'
|
myFunction('foo'); // = 'FOO'
|
||||||
|
|
||||||
|
// Attention, la valeur à retourner doit se trouver sur la même ligne que
|
||||||
|
// le mot-clé `return` sinon la fonction retournera systématiquement `undefined`
|
||||||
|
function myFunction(){
|
||||||
|
return // <- semicolon automatically inserted here
|
||||||
|
{thisIsAn: 'object literal'}
|
||||||
|
}
|
||||||
|
myFunction(); // = undefined
|
||||||
|
|
||||||
|
// *ES6:* Les paramètres des fonctions peuvent désormais avoir des valeurs par défaut
|
||||||
|
function default(x, y = 2) {
|
||||||
|
return x + y;
|
||||||
|
}
|
||||||
|
default(10); // == 12
|
||||||
|
|
||||||
// Les fonctions JavaScript sont des objets de première classe, donc peuvent
|
// Les fonctions JavaScript sont des objets de première classe, donc peuvent
|
||||||
// être réassignées à d'autres variables et passées en tant que paramètres pour
|
// être réassignées à d'autres variables et passées en tant que paramètres pour
|
||||||
// d'autres fonctions
|
// d'autres fonctions
|
||||||
@@ -280,6 +412,10 @@ setTimeout(function(){
|
|||||||
// ce code s'exécutera dans 5 secondes
|
// ce code s'exécutera dans 5 secondes
|
||||||
}, 5000);
|
}, 5000);
|
||||||
|
|
||||||
|
// *ES6:* Introduction d'un sucre syntaxique permettant de créer
|
||||||
|
// une fonction anonyme de la forme : `param => returnValue`.
|
||||||
|
setTimeout(() => console.log('5 seconds, are up.'), 5000);
|
||||||
|
|
||||||
// Le Javascript crée uniquement un scope, une portée d'action limitée, pour
|
// Le Javascript crée uniquement un scope, une portée d'action limitée, pour
|
||||||
// les fonctions, et pas dans les autres blocs.
|
// les fonctions, et pas dans les autres blocs.
|
||||||
if (true){
|
if (true){
|
||||||
@@ -318,6 +454,18 @@ function sayHelloInFiveSeconds(name){
|
|||||||
}
|
}
|
||||||
sayHelloInFiveSeconds('Adam'); // ouvre un popup avec 'Hello, Adam!' dans 5sec
|
sayHelloInFiveSeconds('Adam'); // ouvre un popup avec 'Hello, Adam!' dans 5sec
|
||||||
|
|
||||||
|
// *ES6:* Les paramètres des fonctions appelées avec un tableau en entré
|
||||||
|
// préfixé par `...` vont se peupler avec les éléments du tableau
|
||||||
|
function spread(x, y, z) {
|
||||||
|
return x + y + z;
|
||||||
|
}
|
||||||
|
spread(...[1,2,3]); // == 6
|
||||||
|
|
||||||
|
// *ES6:* Les fonctions peuvent recevoir les paramètres dans un tableau en utilisant l'opérateur `...`
|
||||||
|
function spread(x, y, z) {
|
||||||
|
return x + y + z;
|
||||||
|
}
|
||||||
|
spread(...[1,2,3]); // == 6
|
||||||
|
|
||||||
///////////////////////////////////
|
///////////////////////////////////
|
||||||
// 5. Encore plus à propos des Objets; Constructeurs and Prototypes
|
// 5. Encore plus à propos des Objets; Constructeurs and Prototypes
|
||||||
@@ -492,6 +640,58 @@ if (Object.create === undefined){ // pour ne pas reécrire si la fonction existe
|
|||||||
return new Constructor();
|
return new Constructor();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// *ES6:* Les objets peuvent être équipés de proxies qui permettent d'intercepter
|
||||||
|
// les actions sur leurs propriétés. Voici comment créer un proxy sur un objet :
|
||||||
|
var proxyObject = new Proxy(object, handler);
|
||||||
|
|
||||||
|
// *ES6:* Les méthodes d'un objet handler sont appelées lors de l'interception d'une action.
|
||||||
|
// La méthode `.get()` est appelée à chaque lecture d'une propriété
|
||||||
|
// tandis que la méthode `.set()` est appelée à chaque écriture.
|
||||||
|
var handler = {
|
||||||
|
get (target, key) {
|
||||||
|
console.info('Get on property' + key);
|
||||||
|
return target[key];
|
||||||
|
},
|
||||||
|
set (target, key, value) {
|
||||||
|
console.info('Set on property' + key);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// *ES6:* Les classes peuvent désormais être définies en utilisant le mot-clé `class`.
|
||||||
|
// Le constructeur s'appelle `constructor` et les méthodes statiques utilisent le mot-clé `static`
|
||||||
|
class Foo {
|
||||||
|
constructor() {console.log("constructing Foo");}
|
||||||
|
bar() {return "bar";}
|
||||||
|
static baz() {return "baz";}
|
||||||
|
}
|
||||||
|
|
||||||
|
// *ES6:* Les objets issus des classes sont initialisés avec le mot-clé `new`.
|
||||||
|
// Il est possible d'hériter d'une classe avec le mot-clé `extends`
|
||||||
|
var FooObject = new Foo(); // = "constructing Foo"
|
||||||
|
class Zoo extends Foo {}
|
||||||
|
|
||||||
|
// *ES6:* Les méthodes statiques doivent être appelées par la classe, les autres méthodes par l'objet
|
||||||
|
Foo.baz() // = "baz"
|
||||||
|
FooObject.bar() // = "bar"
|
||||||
|
|
||||||
|
// *ES6:* Il est désormais possible d'exporter des valeurs en tant que module.
|
||||||
|
// Les exports peuvent être n'importe quel objet, valeur ou fonction.
|
||||||
|
var api = {
|
||||||
|
foo: "bar",
|
||||||
|
baz: "ponyfoo"
|
||||||
|
};
|
||||||
|
export default api;
|
||||||
|
|
||||||
|
// *ES6:* La syntaxe `export default` permet d'exporter l'objet sans en changer le nom.
|
||||||
|
// Il y a plusieurs façons de l'importer:
|
||||||
|
import coolapi from "api"; // = importe le module dans la variable `coolapi`
|
||||||
|
import {foo, baz} from "api"; // = importe les attributs `foo` et `baz` du module
|
||||||
|
import {foo as moo, baz} from "api"; // = importe les attributs `foo` (en le renommant `moo`) et `baz` du module
|
||||||
|
import _, {map} from "api"; // = importe les exports par défaut ET `map`
|
||||||
|
import * as coolapi from "api"; // = importe le namespace global du module
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Pour aller plus loin (en anglais)
|
## Pour aller plus loin (en anglais)
|
||||||
|
Reference in New Issue
Block a user