Skip to content

Commit 8b45897

Browse files
author
Sebastien Nicoud
committed
fr translation
1 parent 16f9e21 commit 8b45897

25 files changed

+1730
-2
lines changed

doc/fr/array/constructor.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
## Le constructeur `Array`
2+
3+
Le constructeur `Array` traite ses paramètres de façon ambigu.
4+
Il est fortement recommandé d'utiliser le littéral de tableau - notation `[]` - pour créer de nouveaux tableaux.
5+
6+
[1, 2, 3]; // Résultat: [1, 2, 3]
7+
new Array(1, 2, 3); // Résultat: [1, 2, 3]
8+
9+
[3]; // Résultat: [3]
10+
new Array(3); // Résultat: []
11+
new Array('3') // Résultat: ['3']
12+
13+
Dans les cas où il n'y a qu'un seul argument passé au constructeur `Array`, et quand cet argument est un nombre `Number`, le constructeur va retourner un nouveau tableau *clairsemé* avec la propriété `length` (longueur) fixée à la valeur de l'argument.
14+
Il faut noter que de cette façon, **seulement** la propriété `length` du nouveau tableau sera mise en place, les indices réels du tableau ne seront pas initialisés.
15+
16+
var arr = new Array(3);
17+
arr[1]; // undefined
18+
1 in arr; // faux, l'indice n'existe pas
19+
20+
Être en mesure de régler la longueur du tableau à l'avance n'est utile que dans quelques cas, comme la répétition d'une chaîne de caractères, dans lequel on évite l'utilisation d'une boucle.
21+
22+
new Array(count + 1).join(chaineARepeter);
23+
24+
### En conclusion
25+
26+
Les littéraux sont préférés au constructeur `Array`. Ils sont plus courts, ont une syntaxe plus claire, et augmente la lisibilité du code.
27+

doc/fr/array/general.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
## Tableaux: iteration et propriétés
2+
3+
Bien que les tableaux soient des objets en JavaScript, il n'y a pas de bonnes raisons d'utiliser la boucle [`for in`](#object.forinloop).
4+
En fait, il un certain nombre de bonnes raisons **contre** l'utilisation de `for in` sur les tableaux.
5+
6+
**Remarque:** Les tableaux JavaScript ne sont **pas** *associatifs*. JavaScript n'offre que les [objets](#object.general) pour associer des clés à des valeurs. Contrairement aux tableaux associatifs, les objets ne préservent **pas** l'ordre.
7+
8+
La boucle `for in` énumère toutes les propriétés qui sont sur la chaîne de prototypes, et le seul moyen d'exclure ces propriétés consiste à utiliser
9+
[`hasOwnProperty`](#object.hasownproperty), par conséquent la boucle `for in ` est **vingt fois** plus lente qu'une boucle `for` classique.
10+
11+
### Itération
12+
13+
Pour itérer sur les tableaux de façon performante, il est préférable d'utiliser la boucle `for` classique.
14+
15+
var list = [1, 2, 3, 4, 5, ...... 100000000];
16+
for(var i = 0, l = list.length; i < l; i++) {
17+
console.log(list[i]);
18+
}
19+
20+
Notez l'optimization supplémentaire dans l'exemple ci-dessus: la longueur du tableau est mise en mémoire "cached" via `l = list.length`.
21+
22+
La propriété `length` est définie sur le tableau lui-même, mais la rechercher à chaque itération de la boucle à un coût.
23+
Bien que les moteurs JavaScript récents **peuvent** appliquer l'optimisation, il n'y a aucun moyen de savoir si le code s'exécutera sur un de ces nouveaux moteurs.
24+
25+
En effet, mettre la longueur du tableau en mémoire cache peut **doubler** la vitesse d'execution de la boucle.
26+
27+
### La propriété `length`
28+
29+
Le *getter* de la propriété `length` (longueur) renvoie simplement le nombre d'éléments contenus dans le tableau, mais le *setter* peut être utilisé pour
30+
tronquer le tableau.
31+
32+
var arr = [1, 2, 3, 4, 5, 6];
33+
arr.length = 3;
34+
arr; // [1, 2, 3]
35+
36+
arr.length = 6;
37+
arr.push(4);
38+
arr; // [1, 2, 3, undefined, undefined, undefined, 4]
39+
40+
Attribuer une longueur inférieure tronque le tableau. Accroître la longueur crée un tableau clairsemé.
41+
42+
### En conclusion
43+
44+
Pour de meilleures performances, il est recommandé de toujours utiliser la boucle `for` classique et de mettre en mémoire la propriété `length`.
45+
L'utilisation de la boucle `for in` sur un tableau est un signe de code mal écrit, de mauvaise performance, et sujet à des bogues.
46+

doc/fr/core/delete.md

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
## L'opérateur `delete`
2+
3+
Il est *impossible* de supprimer les variables globales, fonctions et autres choses qui ont l'attribut `DontDelete` en JavaScript.
4+
5+
### Le code global et le code de fonction
6+
7+
Quand une variable ou une fonction est définie dans la portée globale ou une [portée de fonction](#function.scopes), c'est une propriété soit de l'objet d'activation, soit de l'objet global.
8+
Ces propriétés ont un ensemble d'attributs, dont l'un est `DontDelete`. Les déclarations de variables et de fonctions dans le code global et le code de fonction vont toujours créer des propriétés avec `DontDelete`, elle ne peuvent donc pas être supprimées.
9+
10+
// global variable:
11+
var a = 1; // DontDelete est mis
12+
delete a; // faux
13+
a; // 1
14+
15+
// normal function:
16+
function f() {} // DontDelete is mis
17+
delete f; // faux
18+
typeof f; // "function"
19+
20+
// reassigner n'aide pas:
21+
f = 1;
22+
delete f; // faux
23+
f; // 1
24+
25+
### Propriétés explicites
26+
27+
Les propriétés crées explicitement peuvent être supprimées normalement.
28+
29+
// propriété crée explicitement:
30+
var obj = {x: 1};
31+
obj.y = 2;
32+
delete obj.x; // vrai
33+
delete obj.y; // vrai
34+
obj.x; // undefined
35+
obj.y; // undefined
36+
37+
Dans l'exemple ci-dessus, les propriétés `obj.x` et `obj.y` peuvent être supprimées parce qu'elles n'ont pas l'attribut `DontDelete`. C'est aussi pourquoi l'exemple ci-dessous fonctionne également.
38+
39+
// ceci fonctionne, sauf sur IE:
40+
var GLOBAL_OBJECT = this;
41+
GLOBAL_OBJECT.a = 1;
42+
a === GLOBAL_OBJECT.a; // vrai - juste une var globale
43+
delete GLOBAL_OBJECT.a; // vrai
44+
GLOBAL_OBJECT.a; // undefined
45+
46+
Ici, nous utilisons une astuce pour supprimer `a`. [`this`](#function.this) se réfère ici à l'objet global et nous déclarons explicitement la variable `a` comme sa propriété, ce qui nous permet de la supprimer.
47+
48+
IE (au moins 6-8) a quelques bogues, le code ci-dessus n'y fonctionne pas.
49+
50+
### Les arguments de fonction et built-ins
51+
52+
Les arguments normaux de fonctions, [objets `arguments`](#Function.arguments) et les propriétés intégrées "built-in" ont aussi l'attribut `DontDelete`.
53+
54+
// les arguments de fonction et les propriétés:
55+
(function (x) {
56+
57+
delete arguments; // faux
58+
typeof arguments; // "object"
59+
60+
delete x; // faux
61+
x; // 1
62+
63+
function f(){}
64+
delete f.length; // faux
65+
typeof f.length; // "number"
66+
67+
})(1);
68+
69+
### Objets hôtes
70+
71+
Le comportement de l'opérateur `delete` peut être imprévisible pour les objets hébergés "hosted". Dû à la spécification, les objets hôte sont autorisés à mettre en œuvre tout type de comportement.
72+
73+
### En conclusion
74+
75+
L'opérateur `delete` a souvent un comportement inattendu et ne peut être utilisé que pour supprimer les propriétés explicitement définies sur des objets normaux.
76+

doc/fr/core/eval.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
## Il ne faut pas utiliser `eval`
2+
3+
La fonction `eval` exécute une chaîne de caractères représentant du code JavaScript dans la portée locale.
4+
5+
var number = 1;
6+
function test() {
7+
var number = 2;
8+
eval('number = 3');
9+
return number;
10+
}
11+
test(); // 3
12+
number; // 1
13+
14+
Cependant, `eval` n'exécute dans la portée locale que quand il est appelé directement *et* quand le nom de la fonction appelée est en fait `eval`.
15+
16+
var number = 1;
17+
function test() {
18+
var number = 2;
19+
var copyOfEval = eval;
20+
copyOfEval('number = 3');
21+
return number;
22+
}
23+
test(); // 2
24+
number; // 3
25+
26+
L'utilisation de la fonction `eval` doit être évitée. 99,9% de ses "cas d'utilisation" peuvent être obtenues **sans** elle.
27+
28+
### `eval` déguisé
29+
30+
Les [fonctions timeout](#other.timeouts) `setTimeout` et `setInterval` acceptent une chaîne comme premier argument.
31+
Cette chaîne sera **toujours** exécutée dans la portée globale car dans ce cas, `eval` n'est pas appelé directement.
32+
33+
### Problèmes de sécurité
34+
35+
`eval` est aussi un problème de sécurité, car il exécute **n'importe quel** code qu'on lui donne.
36+
Il devrait **jamais** être utilisé avec des chaînes d'origines inconnues ou douteuses.
37+
38+
### En conclusion
39+
40+
`eval` ne devrait jamais être utilisé. Sa presence met en doute le fonctionnement, la performance, et la sécurité du code qui l'utilise.
41+
Si quelque chose a besoin d'`eval` pour pouvoir fonctionner, il ne doit **pas** être utilisé en premier lieu. Un *meilleur design* qui n'utilise pas `eval` doit être trouvé et implementé.
42+

doc/fr/core/semicolon.md

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
## Insertion automatique du point-virgule
2+
3+
Bien que JavaScript a une syntaxe de style C, il n'impose **pas** les points-virgules dans le code source. Il est donc possible de les omettre.
4+
5+
JavaScript n'est pas un langage sans points-virgules. En fait, les points-virgules sont necessaires pour comprendre le code source. Par conséquent, l'analyseur JavaScript les insère **automatiquement** chaque fois qu'il rencontre une erreur d'analyse due à un point-virgule manquant.
6+
7+
var foo = function() {
8+
} // erreur d'analyse, point-virgule attendu
9+
test()
10+
11+
L'analyseur insère un point-virgule, puis tente à nouveau.
12+
13+
var foo = function() {
14+
}; // plus d'error, l'analyse continue
15+
test()
16+
17+
L'insertion automatique du point-virgule est considérée comme l'un des **plus gros** défauts de conception dans le langage parce que cela *peut* changer le comportement du code.
18+
19+
### Comment cela marche
20+
21+
Le code ci-dessous n'a pas de points-virgules, l'analyseur va donc décider où les insérer.
22+
23+
(function(window, undefined) {
24+
function test(options) {
25+
log('testing!')
26+
27+
(options.list || []).forEach(function(i) {
28+
29+
})
30+
31+
options.value.test(
32+
'long string to pass here',
33+
'and another long string to pass'
34+
)
35+
36+
return
37+
{
38+
foo: function() {}
39+
}
40+
}
41+
window.test = test
42+
43+
})(window)
44+
45+
(function(window) {
46+
window.someLibrary = {}
47+
48+
})(window)
49+
50+
Voici le résultat du jeu de devinette de l'analyseur.
51+
52+
(function(window, undefined) {
53+
function test(options) {
54+
55+
// pas inséré, les lignes ont fusionné
56+
log('testing!')(options.list || []).forEach(function(i) {
57+
58+
}); // <- inséré
59+
60+
options.value.test(
61+
'long string to pass here',
62+
'and another long string to pass'
63+
); // <- inséré
64+
65+
return; // <- inséré, casse la déclaration return
66+
{ // traité comme un bloc
67+
68+
// un label et une déclaration d'expression
69+
foo: function() {}
70+
}; // <- inséré
71+
}
72+
window.test = test; // <- inséré
73+
74+
// les lignes ont fusionné ici encore
75+
})(window)(function(window) {
76+
window.someLibrary = {}; // <- inséré
77+
78+
})(window); //<- inséré
79+
80+
> **Remarque:** L'analyseur JavaScript ne manipule pas "correctement" les déclarations return suivies par une nouvelle ligne.
81+
82+
L'analyseur a radicalement changé le comportement du code ci-dessus. Dans certains cas, il fait la **mauvaise chose**.
83+
84+
### Parenthèse en tête
85+
86+
En cas de parenthèse en tête, l'analyseur ne va **pas** insérer de point-virgule.
87+
88+
log('testing!')
89+
(options.list || []).forEach(function(i) {})
90+
91+
Ce code fusionne en une ligne.
92+
93+
log('testing!')(options.list || []).forEach(function(i) {})
94+
95+
Il y a de **très** fortes chances que `log` ne retourne **pas** de fonction; par conséquent, le programme ci-dessus va produire une erreur de type `TypeError` indiquant que undefined n'est pas un function `undefined is not a function`.
96+
97+
### En conclusion
98+
99+
Il est fortement recommandé de ne **jamais** omettre les points-virgules. Il est également recommandé de garder les accolades sur la même ligne que leurs déclarations correspondantes et de ne jamais les omettre pour les déclaration en une ligne `if` / `else`. Ces mesures vont non seulement améliorer la cohérence du code, mais elles empêcheront également l'analyseur JavaScript de changer le comportement du code.
100+

doc/fr/core/undefined.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
## `undefined` et `null`
2+
3+
JavaScript a deux valeurs distinctes pour "rien": `null` et `undefined`, `undefined` étant la plus utile.
4+
5+
### La valeur `undefined`
6+
7+
`undefined` est un type avec exactement une valeur:` undefined`.
8+
9+
Le langage définit également une variable globale qui a la valeur `undefined`. Cette variable est aussi appelée `undefined`. Cependant, cette variable n'est ni une constante, ni un mot clé du langage, ce que signifie que sa *valeur* peut être facilement écrasée.
10+
11+
> **Remarque ES5:** `undefined` dans ECMAScript 5 n'est **plus** inscriptible dans le mode stricte, mais son nom peut toujours être outrepassé, par example par une fonction avec le nom `undefined`.
12+
13+
Voici quelques exemples de cas où la valeur `undefined` est retournée:
14+
15+
- Accès à la variable globale (non modifié) `undefined`.
16+
- Accès à une variable déclarée, mais *pas encore* initialisée.
17+
- Retours implicites de fonctions sans déclaration `return`.
18+
- Déclarations `return` vides, qui ne renvoient rien.
19+
- Recherches de propriétés inexistantes.
20+
- Paramètres de fonction qui ne ont pas de valeur explicite passée.
21+
- Tout ce qui a été mis à la valeur de `undefined`.
22+
- Toute expression sous forme de `void(expression)`.
23+
24+
### Changements à la valeur de `undefined`
25+
26+
Puisque la variable globale `undefined` contient uniquement une copie de la *valeur* réelle `undefined`, l'attribution d'une nouvelle valeur à la variable ne modifie **pas** la valeur du *type* `undefined`.
27+
28+
Pourtant, pour pouvoir comparer quelque chose contre la valeur de `undefined`, il est d'abord nécessaire pour récupérer la valeur de `undefined`.
29+
30+
Afin de protéger le code contre une éventuelle variable `undefined` écrasée, une technique commune utilisée consiste à ajouter un paramètre supplémentaire à une [enveloppe anonyme](#function.scopes) et de lui passer aucun argument.
31+
32+
var undefined = 123;
33+
(function(something, foo, undefined) {
34+
// undefined dans la portée locale
35+
// réfère bien à la valeur `undefined`
36+
37+
})('Hello World', 42);
38+
39+
Une autre façon d'obtenir le même effet est d'utiliser une déclaration à l'intérieur de l'enveloppe.
40+
41+
var undefined = 123;
42+
(function(something, foo) {
43+
var undefined;
44+
...
45+
46+
})('Hello World', 42);
47+
48+
La seule différence étant quelques caractères de plus pour écrire "var".
49+
50+
### Utilisation de `null`
51+
52+
Alors que `undefined` dans le contexte du langage JavaScript est utilisé dans la plupart des cas dans le d'un *null* traditionnel, le `null` réel (un littéral et un type) est juste un autre type de données.
53+
54+
`null` est utilisé par JavaScript (comme signaler la fin de la chaîne de prototypes avec `Foo.prototype = null`), mais dans presque tous les cas, il peut être remplacé par `undefined`.
55+

0 commit comments

Comments
 (0)