| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Guide/Data_structures#conversion_de_primitive | [Back] [Original] |
Get to know MDN better
Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.
Les langages de programmation disposent de structures de donnes natives. Selon les langages, les structures mises disposition peuvent tre diffrentes. Dans cet article, on listera les structures de donnes natives en JavaScript. On dtaillera leurs proprits et les faons de les utiliser voire de les combiner. Dans certains cas, on comparera ces structures avec celles d'autres langages.
typeof
JavaScript est un langage dont le typage est faible et dynamique. Cela signifie qu'il n'est pas ncessaire de dclarer le type d'une variable avant de l'utiliser. Le type de la variable sera automatiquement dtermin lorsque le programme sera excut. Cela signifie galement que la mme variable pourra avoir diffrents types au cours de son existence :
let toto = 42; // toto est un nombre
toto = "truc"; // toto est dsormais une chane de caractres
toto = true; // toto est dsormais un boolen
L'ensemble des types disponible en JavaScript se compose des valeurs primitives et des objets.
Les valeurs primitives (des donnes immuables, reprsentes au niveau le plus bas du langage)
Les objets (des ensembles de proprits)
Tous les types, sauf les objets, dfinissent des valeurs immuables (qu'on ne peut modifier). Ainsi, contrairement au C, les chanes de caractres sont immuables en JavaScript. Les valeurs immuables pour chacun de ces types sont appeles valeurs primitives .
Un boolen reprsente le rsultat d'une assertion logique et peut avoir deux valeurs : true (pour le vrai logique) et false (pour le faux logique) (voir Boolean pour plus de dtails sur la reprsentation objet de ce type).
Le type nul ne possde qu'une valeur : null. Voir null et la page du glossaire pour plus d'informations.
Une variable laquelle on n'a pas affect de valeur vaudra undefined. Voir undefined et la page du glossaire pour plus d'informations.
ECMAScript possde deux types numriques natifs : Number et BigInt, ainsi que la valeur spciale NaN.
Le type Number est gr pour reprsenter les nombres : les nombres flottants prcision double, reprsents sur 64 bits, selon le format IEEE 754. Cette reprsentation permet de stocker des nombres dcimaux entre 2^-1074 et 2^1024, mais ne permet de reprsenter des entiers de faon sre qu'au sein de l'intervalle allant de -(2^53 1) 2^53 1. Les valeurs en dehors de l'intervalle compris entre Number.MIN_VALUE et Number.MAX_VALUE sont automatiquement converties en +Infinity ou -Infinity, qui se comporteront de faon analogue l'infini mathmatique (voir la page sur Number.POSITIVE_INFINITY pour les dtails et les quelques diffrences).
Note :
Vous pouvez vrifier si un nombre est un nombre entier reprsentable de faon exacte avec une reprsentation en nombre flottant double prcision avec la mthode Number.isSafeInteger(). En dehors de l'intervalle entre Number.MIN_SAFE_INTEGER et Number.MAX_SAFE_INTEGER, JavaScript ne peut plus reprsenter un entier de faon exacte et ce sera une approximation avec un nombre flottant double prcision.
Pour le type Number, il n'y a qu'un seul nombre qui possde plusieurs reprsentations : 0 qui est reprsent comme -0 et +0 (avec 0 tant un synonyme pour +0). En pratique, il n'y a presque pas de diffrences entre ces reprsentations et +0 === -0 vaut true. Toutefois, on pourra remarquer la nuance lors de la division par zro :
> 42 / +0
Infinity
> 42 / -0
-Infinity
Dans la plupart des cas, un nombre reprsente sa propre valeur et JavaScript fournit des oprateurs binaires.
Note : Bien que les oprateurs binaires puissent tre utiliss afin de reprsenter plusieurs valeurs boolennes avec un seul nombre en utilisant un masque de bits, c'est gnralement une mauvaise pratique. En effet, JavaScript fournit d'autres moyens pour reprsenter un ensemble de valeurs boolennes comme les tableaux ou l'utilisation de proprits nommes pour stocker ces valeurs. L'utilisation d'un masque de bit dgrade galement la lisibilit, la clart et la maintenabilit du code.
Il peut tre ncessaire d'utiliser de telles techniques dans des environnements extrmement contraints, pour grer des limites de stockage local ou lorsque chaque bit transmis sur le rseau compte. Cette technique devrait uniquement tre considre comme dernire mesure pour rduire la taille.
BigIntLe type BigInt est un type numrique qui permet de reprsenter des entiers avec une prcision arbitraire. Avec ce type, on peut donc manipuler des entiers plus grands que ceux reprsentables avec Number.
Pour crer un grand entier, on ajoutera un n aprs l'entier ou on appellera le constructeur BigInt.
On peut connatre la valeur la plus grande qui peut tre incrmente et reprsente avec le type Number en utilisant la constante Number.MAX_SAFE_INTEGER. Avec les grands entiers, on peut manipuler des nombres qui vont au-del de Number.MAX_SAFE_INTEGER.
Dans l'exemple qui suit, on voit le rsultat obtenu lorsqu'on incrmente la valeur de Number.MAX_SAFE_INTEGER :
// BigInt
> const x = BigInt(Number.MAX_SAFE_INTEGER);
9007199254740991n
> x + 1n === x + 2n; // 9007199254740992n === 9007199254740993n
false
// Number
> Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2; // 9007199254740992 === 9007199254740992
true
l'instar des nombres classiques, on peut utiliser les oprateurs +, *, -, ** et %. Un grand entier ne sera pas strictement gal un nombre mais on pourra avoir une galit faible.
Un grand entier se comportera comme un nombre lorsqu'il est converti en boolen avec if, ||, &&, Boolean et !.
Il n'est pas possible d'utiliser des grands entiers et des nombres de faon interchangeable. Une exception TypeError sera dclenche en cas d'incompatibilit.
NaN (pour Not A Number en anglais, qui signifie qui n'est pas un nombre ) est utilise lorsque le rsultat d'une opration arithmtique ne peut pas tre exprime comme un nombre. Il s'agit galement de la seule valeur JavaScript qui n'est pas gale elle-mme (du fait de la norme IEEE 754).
String)Ce type JavaScript est utilis afin de reprsenter des donnes de texte. C'est un ensemble d' lments de valeurs entires non-signes reprsentes sur 16 bits. Chaque lment occupe une position au sein de cette chane de caractres. Le premier lment est situ l'indice 0, le deuxime l'indice 1 et ainsi de suite. La longueur d'une chane de caractres correspond au nombre d'lments qu'elle contient.
la diffrence d'autres langages (comme le C), les chanes de caractres JavaScript sont immuables. Cela signifie qu'une fois une chane cre, il est impossible de la modifier.
En revanche, il est toujours possible de crer une autre chane base sur la premire grce des oprations. Par exemple :
String.substr().+) ou String.concat().a peut tre tentant de vouloir utiliser des chanes afin de reprsenter des donnes complexes. En revanche, les avantages de cette mthode ne sont que trs superficiels :
XMLHttpRequest avec responseText, etc.).En utilisant des conventions, il peut tre possible de reprsenter n'importe quelle donne sous forme d'une chane de caractres, en revanche cela n'est souvent pas la meilleure faon. Par exemple, avec un sparateur, on pourrait muler le comportement d'un tableau en interdisant que ce sparateur soit utilis pour lments, etc. On pourrait ensuite dfinir un caractre d'chappement, qui serait son tour inutilisable dans les chanes : toutes ces pseudo-conventions entraneront de lourdes consquences en termes de maintenance.
En rsum, les chanes doivent tre utilises pour les donnes de texte. Pour des donnes plus complexes, utilisez une abstraction adquate et analysez/parsez les chanes que vous recevez d'autres API.
Un symbole est une valeur primitive unique et immuable pouvant tre utilise comme cl pour proprit d'un objet (voir ci-aprs). Dans d'autres langages de programmation, les symboles sont appels atomes.
Pour plus de dtails, voir les pages du glossaire et de Symbol JavaScript.
En informatique, un objet est une valeur conserve en mmoire laquelle on fait rfrence grce un identifiant.
En JavaScript, les objets peuvent tre considrs comme des collections de proprits. En utilisant un littral objet, il est possible d'initialiser un ensemble limit de proprits ; d'autres proprits peuvent ensuite tre ajoutes et/ou retires. Les valeurs des proprits peuvent tre de n'importe quel type, y compris des objets. Cela permet de construire des structures de donnes complexes. Les proprits sont identifies grce une cl . Une cl peut tre une chane de caractres ou un symbole.
Il existe deux types de proprits qui ont certains attributs : des proprits de donnes (data property) et des proprits d'accesseur.
Note : Chaque proprit est dcrite par des attributs correspondants. Ceux-ci sont utiliss par le moteur JavaScript et ne peuvent pas tre manipuls depuis le code. Pour les identifier, les attributs sont indiqus entre double crochets.
Voir la page Object.defineProperty() pour en savoir plus.
Elles associent une cl avec une valeur et possdent les attributs suivants :
| Attribut | Type | Description | Valeur par dfaut |
|---|---|---|---|
[[Value]] |
N'importe quel type JavaScript | La valeur obtenue lorsqu'on accde la proprit. | undefined |
[[Writable]] |
Boolen |
Si cet attribut vaut false, l'attribut [[Value]] de la proprit ne pourra pas tre chang.
|
false |
[[Enumerable]] |
Boolen |
Si cet attribut vaut |
false |
[[Configurable]] |
Boolen |
Si cet attribut vaut false, la proprit ne peut pas tre supprime, ne peut pas tre change en proprit d'accesseur et les attributs en dehors de [[Value]] et [[Writable]] ne pourront pas tre changs.
|
false |
| Attribut | Type | Description |
|---|---|---|
Read-only |
Boolen | tat symtrique pour l'attribut ES5 [[Writable]]. |
DontEnum |
Boolen | tat symtrique pour l'attribut ES5 [[Enumerable]]. |
DontDelete |
Boolen | tat symtrique pour l'attribut ES5 [[Configurable]]. |
Ces proprits associent une cl avec une ou deux fonctions accesseur et mutateur (respectivement get et set) qui permettent de rcuprer ou d'enregistrer une valeur.
Note : Il est important de noter qu'on parle de proprit d'accesseur et pas de mthode. On peut donner des accesseurs semblables ceux d'une classe un objet en utilisant une fonction comme valeur d'une proprit mais a ne fait pas de l'objet une classe.
Elles possdent les attributs suivants :
| Attribut | Type | Description | Valeur par dfaut |
|---|---|---|---|
[[Get]] |
Un objet Function ou undefined |
La fonction qui est appele sans argument afin de rcuprer la valeur de la proprit quand on souhaite y accder. Voir aussi la page sur get. |
undefined |
[[Set]] |
Un objet Function ou undefined |
La fonction, appele avec un argument qui contient la valeur qu'on souhaite affecter la valeur et qui est excute chaque fois qu'on souhaite modifier la valeur. Voir aussi la page sur set. |
undefined |
[[Enumerable]] |
Boolen | S'il vaut true, la proprit sera liste dans les boucles forin. |
false |
[[Configurable]] |
Boolen | S'il vaut false, la proprit ne pourra pas tre supprime et ne pourra pas tre transforme en une proprit de donnes. |
false |
Un objet JavaScript est un ensemble de correspondances entre des cls et des valeurs. Les cls sont reprsentes par des chanes ou des symboles (Symbol). Les valeurs peuvent tre de n'importe quel type. Grce cela, les objets peuvent, naturellement, tre utiliss comme tables de hachage.
Les fonctions sont des objets classiques la seule diffrence qu'on peut les appeler.
Lorsqu'on souhaite reprsenter des dates, il est tout indiqu d'utiliser le type utilitaire natif Date de JavaScript.
Les tableaux (ou Arrays en anglais) sont des objets natifs qui permettent d'organiser des valeurs numrotes et qui ont une relation particulire avec la proprit length.
De plus, les tableaux hritent de Array.prototype qui permet de bnficier de plusieurs mthodes pour manipuler les tableaux. Par exemple, indexOf() qui permet de rechercher une valeur dans le tableau ou push() qui permet d'ajouter un lment au tableau. Les tableaux sont donc indiqus quand on souhaite reprsenter des listes de valeurs ou d'objets.
Les tableaux typs (Typed Arrays en anglais) ont t ajouts avec ECMAScript 2015 et offrent une vue sous forme d'un tableau pour manipuler des tampons de donnes binaires. Le tableau qui suit illustre les types de donnes quivalents en C :
| Type | Intervalle | Taille (exprime en octets) | Description | Type Web IDL | Type quivalent en C |
Int8Array |
-128 127 | 1 | Entier sign en complment deux sur 8 bits. | byte |
int8_t |
Uint8Array |
0 255 | 1 | Entier non sign sur 8 bits. | octet |
uint8_t |
Uint8ClampedArray |
0 255 | 1 | Entier non sign sur 8 bits (compris entre 0 et 255). | octet |
uint8_t |
Int16Array |
-32768 32767 | 2 | Entier sign en complment deux sur 16 bits. | short |
int16_t |
Uint16Array |
0 65535 | 2 | Entier non sign sur 16 bits. | unsigned short |
uint16_t |
Int32Array |
-2147483648 2147483647 | 4 | Entier sign en complment deux sur 32 bits. | long |
int32_t |
Uint32Array |
0 4294967295 | 4 | Entier non sign sur 32 bits. | unsigned long |
uint32_t |
Float32Array |
1.2x10^-38 3.4x10^38 | 4 | Nombre flottant sur 32 bits selon la reprsentation IEEE (7 chiffres significatifs). | unrestricted float |
float |
Float64Array |
5.0x10^-324 1.8x10^308 | 8 | Nombre flottant sur 64 bits selon la reprsentation IEEE (16 chiffres significatifs). | unrestricted double |
double |
BigInt64Array |
-2^63 2^63-1 | 8 | Nombre entier sign sur 64 bits en complment deux. | bigint |
int64_t (signed long long) |
BigUint64Array |
0 2^64-1 | 8 | Nombre entier non sign sur 64 bits. | bigint |
uint64_t (unsigned long long) |
Map, Set, WeakMap, WeakSetCes structures de donnes utilisent des cls pour rfrencer des objets. Elles ont t introduites avec ECMAScript 2015. Set et WeakSet reprsentent des ensembles d'objets, Map et WeakMap associent une valeur un objet.
Il est possible d'numrer les valeurs contenues dans un objet Map mais pas dans un objet WeakMap. Les WeakMap quant eux permettent certaines optimisations dans la gestion de la mmoire et le travail du ramasse-miettes.
Il est possible d'implmenter des objets Map et Set grce ECMAScript 5. Cependant, comme les objets ne peuvent pas tre compars (avec une relation d'ordre par exemple), la complexit obtenue pour rechercher un lment serait ncessairement linaire. Les implmentations natives (y compris celle des WeakMap) permettent d'obtenir des performances logarithmiques voire constantes.
Gnralement, si on voulait lier des donnes un nud DOM, on pouvait utiliser les attributs data-* ou dfinir les proprits un mme l'objet. Malheureusement, cela rendait les donnes disponibles n'importe quel script fonctionnant dans le mme contexte. Les objets Map et WeakMap permettent de grer plus simplement une liaison prive entre des donnes et un objet.
JSON (JavaScript Object Notation) est un format d'change de donnes lger, driv de JavaScript et utilis par plusieurs langages de programmation. JSON permet ainsi de construire des structures de donnes universelles pouvant tre changes entre programmes.
Pour plus d'informations, voir la page du glossaire et la page sur JSON.
JavaScript possde une bibliothque standard d'objets natifs. Veuillez lire la rfrence pour en savoir plus sur ces objets.
typeofL'oprateur typeof peut vous aider dterminer le type d'une variable. Pour plus d'informations et sur les cas particuliers, voir la page de rfrence sur cet oprateur.
Cette page a t modifie le 10 avr. 2026 par les contributeurices du MDN.
Certaines parties de ce contenu sont protges par le droit d'auteur 19982026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.
| Web Proxy Viewer | New URL | Original Page |