Informatique


Compléments sur les types

Aller à

Les types primitifs

Il en existe 3:

  • String
  • Number
  • Boolean

Une variable peut changer de type dynamiquement, il suffit de lui réaffecter une valeur d'un autre type, on dit que JavaScript est faiblement typé.

Les types primitifs sont des types qui sont systématiquement passés par valeur où que l'on se trouve dans le code

Exemple: passage par valeur

Démo
<h2>Affectation en créant une instance d'objet</h2>
<script>
	var cours1, cours2;
	cours1="Logique";
	cours2 = cours1;
	document.write(cours2); //Affiche Logique
	cours1="PHP";
	document.write(cours1); //Affiche PHP
	document.write(cours2); //Affiche Logique
</script>

On constate:

  • on affecte cours1 avec "Logique" et ensuite on affecte cour1 à cours2 en faisant cours2=cours1
    De manière assez attendue on constate par le document.write que les 2 variables contiennent "Logique"
  • Si je réaffecte cours1 avec "PHP", il est tout aussi normal (car je n'ai pas fais une deuxième fois cours2 = cours1) que cours 1 contienne "PHP" et cours2 "Logique"
  • on a passé la variable cours1 à cours2 par valeur, lorsque la variable cours1 change de valeur cours2 n'est pas affecté de cette nouvelle valeur

Le passage par valeur est la copie d'une valeur primitive d'une variable dans une autre variable par une opération d'affectation


Les variables de types String, Number et Boolean restent primitives mêmes si elles ont été déclarées au moyen des constructeurs String(), Number() et Boolean()


Les types objets

Tous les autres types sont des objets:

  • Array
  • Date
  • Object
  • function (...et oui les fonctions sont aussi des objets en JS)

Exemple: passage par référence

Démo
<h2>Affectation par un objet</h2>
<script>
	var cours1, cours2;
	cours1={nom:"Logique"};
	cours2 = cours1;
	document.write(cours2.nom); //Affiche Logique
	cours1.nom="PHP";
	document.write(cours1.nom); //Affiche PHP
	document.write(cours2.nom); //Affiche PHP
</script>

On constate:

  • cette fois-ci on charge un objet dans cours2
  • on affecte cours1.nom avec "Logique" et ensuite on affecte cour1 à cours2
    De manière assez attendue on constate par le document.write que les 2 propriétés nom des variables cours1 et cours2 contiennent "Logique"
  • Si je réaffecte cours1.nom avec "PHP", on constate que cours1.nom et cours2.nom contiennent "PHP" !!!
  • or, on a absolument pas fait soit cours2=cours1 ou cours2.nom="PHP"
  • alors pourquoi?
  • car lorsqu'on affecte un objet à une variable cette objet n'est pas passé par valeur mais par référence
  • la référence est un pointeur, c'est-à-dire une adresse, c'est comme si au moment de l'affectation on avait dit à cours2: "quand on t'utilise va prendre l'information dans cours1"
  • au moment où on fait l'affectation cours2=cours1 on affecte l'adresse de la variable cours 1 à la variable cours2

Le passage par référence est la copie d'une adresse de variable dans une autre variable par une opération d'affectation