5.7 Types de Valeurs VS Types de Réferences
En JavaScript, nous avons deux catégories de types. D'un côté, nous avons des types de valeurs, également appelés primitives, de l'autre, nous avons des types de référence. Ainsi, dans la catégorie des types de valeur, nous avons des number, Des chaînes, donc String Des Booléens, symbole, ce qui est nouveau dans ES6, ainsi que Undefined et nul. Ce sont les types primitifs ou types de valeur. De l'autre côté, nous avons des objets, Des fonctions et des tableaux. Ainsi, lors de la dernière vidéo, vous avez appris que les fonctions sont également des objets. Il en va de même pour les tableaux, donc en résumé en JavaScript, nous avons des primitives et des objets. Maintenant, dans cette vidéo, je vais vous montrer comment les primitives et les objets se comportent différemment, car c'est absolument important pour vous de comprendre, avant de passer à la section suivante où je parle des prototypes. Donc sur cette toile vide, je vais définir deux primitives, x et y. Je vais mettre y à x, donc ici y est égal à 10, maintenant je vais changer la valeur de x à 20, ce que je veux que vous notiez ici, c'est que x et y sont deux variables indépendantes, donc, enregistrons les modifications Revenons dans la console, enregistrons x, x est égal à 20 et y est égal à 10, ils sont indépendants. Donc, quand nous travaillons avec des primitives. Cette valeur que nous avons ici est stockée à l'intérieur de cette variable. Lorsque nous copions cette variable, cette valeur qui est stockée dans la variable est copiée dans cette nouvelle variable. Ils sont donc complètement indépendants les uns des autres. Voyons maintenant ce qui se passe si nous utilisons un type de référence ou un objet ici. Je vais donc changer cela en un objet qui a une propriété appelée valeur. Et puis au lieu de dire x est égal à à 20, je vais mettre x. valeur égal à 20. Enregistrez donc les modifications, de retour dans la console, enregistrons x pour que vous puissiez voir que la propriété value est égal à 20, maintenant enregistrons y, vous pouvez voir que la propriété value de y est également égal à 20. Lorsque nous utilisons un objet, cet objet n'est pas stocké dans cette variable. Cet objet est stocké ailleurs dans la mémoire et l'adresse de cet emplacement de mémoire est stockée à l'intérieur de cette variable de mémoire. Ainsi, lorsque nous copions x dans y, c'est l'adresse ou la référence qui est copiée. En d'autres termes, x et y pointent tous deux vers le même objet en mémoire. Et lorsque nous modifions chaque objet à l'aide de x ou y, nos changements sont immédiatement visibles pour les autres variables. Voici donc la conclusion. Les primitives son copiées par valeur, les types de référence ou les objets sont copiés par leur référence. Jetons un coup d'œil à un autre exemple. Je vais donc définir une fonction appelée augmentation qui prend un nombre, et ici nous augmentons simplement ce nombre d'une unité. Déclarons une variable qu'on appelle number et fixons-la à 10. Et puis appelez cette fonction et passez ce numéro.. Maintenant, si je connecte ce numéro sur la console, que pensez-vous que vous verrez? Voyons voir. Enregistrez donc les modifications, nous voyons 10. Or nous avons pourtant augmenté number ici, eh bien, lorsque nous appelons augmentation et passons cette variable number, sa valeur est copiée dans ce paramètre local dans cette fonction. Cette variable est donc complètement indépendante de cette autre variable number. Ici, dans cette fonction, nous incrémentons ce nombre de 1, ce sera donc 11, mais après cette fonction, ce nombre va sortir du cadre. Donc, lorsque nous enregistrons ce numéro sur la console, nous avons essentiellement affaire à ce premier numéro. Je vous ai donc dis que les primitives sont copiées par leur valeur. Il s'agit donc ici de deux copies indépendantes. C'est pourquoi vous voyez 10 sur la console. Maintenant, changeons cela en un type de référence ou un objet. Donc, je vais changer 10 en un objet, qui a une propriété value. Renommons cette variable en objet, et de la même manière, je vais renommer le paramètre de cette fonction en objet, puis incrémenter l'objet point value. Maintenant, lorsque nous enregistrons cela sur la console, que pensez-vous que nous allons voir? Nous allons voir 11. Nous avons obtenu cet objet avec la valeur 11. La raison en est que lorsque nous appelons cette fonction augmentation et passons cet objet. Cet objet est passé par sa référence. Donc, ce paramètre local que nous avons ici pointera vers le même objet que nous avons défini ici. Donc dans ce cas, nous n'avons pas affaire à deux copies indépendantes, nous avons deux variables qui pointent vers le même objet. Ainsi, toutes les modifications que nous apportons à cet objet seront visibles pour l'autre variable. N'oubliez donc pas qu'en JavaScript, nous avons des types de valeur, également appelés primitives, ainsi que des types de référence qui sont des objets. Les primitives ou types de valeurs sont copiés par leurs valeurs, et les objets sont copiés par leur référence. Voilà pour cette vidéo sur les types de valeurs et réferences en JavaSscript, on se retrouve pour une toute prochaine vidéo.