GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GeezerVison is showing developer.mozilla.org — Types et structures de données JavaScript - JavaScript | MDN Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
Types et structures de données JavaScriptLes langages de programmation disposent de structures de données natives. Selon les langages, les structures mises à disposition peuvent être différentes. Dans cet article, on listera les structures de données natives en JavaScript. On détaillera leurs propriétés et les façons de les utiliser voire de les combiner. Dans certains cas, on comparera ces structures avec celles d'autres langages. Un typage dynamiqueJavaScript est un langage dont le typage est faible et dynamique. Cela signifie qu'il n'est pas nécessaire de déclarer le type d'une variable avant de l'utiliser. Le type de la variable sera automatiquement déterminé lorsque le programme sera exécuté. Cela signifie également que la même variable pourra avoir différents types au cours de son existence : js Les types de données JavaScriptL'ensemble des types disponible en JavaScript se compose des valeurs primitives et des objets.
Les valeurs primitivesTous les types, sauf les objets, définissent des valeurs immuables (qu'on ne peut modifier). Ainsi, contrairement au C, les chaînes de caractères sont immuables en JavaScript. Les valeurs immuables pour chacun de ces types sont appelées « valeurs primitives ». Le type booléenUn booléen représente le résultat d'une assertion logique et peut avoir deux valeurs : Le type nulLe type nul ne possède qu'une valeur : Le type indéfiniUne variable à laquelle on n'a pas affecté de valeur vaudra Les types numériquesECMAScript possède deux types numériques natifs : Le type nombreLe type Note :
Vous pouvez vérifier si un nombre est un nombre entier représentable de façon exacte avec une représentation en nombre flottant à double précision avec la méthode Pour le type js Dans la plupart des cas, un nombre représente sa propre valeur et JavaScript fournit des opérateurs binaires. Note : Bien que les opérateurs binaires puissent être utilisés afin de représenter plusieurs valeurs booléennes avec un seul nombre en utilisant un masque de bits, c'est généralement une mauvaise pratique. En effet, JavaScript fournit d'autres moyens pour représenter un ensemble de valeurs booléennes comme les tableaux ou l'utilisation de propriétés nommées pour stocker ces valeurs. L'utilisation d'un masque de bit dégrade également la lisibilité, la clarté et la maintenabilité du code. Il peut être nécessaire d'utiliser de telles techniques dans des environnements extrêmement contraints, pour gérer des limites de stockage local ou lorsque chaque bit transmis sur le réseau compte. Cette technique devrait uniquement être considérée comme dernière mesure pour réduire la taille. Le type
|
| Attribut | Type | Description | Valeur par défaut |
|---|---|---|---|
[[Value]] |
N'importe quel type JavaScript | La valeur obtenue lorsqu'on accède à la propriété. | undefined |
[[Writable]] |
Booléen |
Si cet attribut vaut false, l'attribut [[Value]] de la propriété ne pourra pas être changé.
|
false |
[[Enumerable]] |
Booléen |
Si cet attribut vaut |
false |
[[Configurable]] |
Booléen |
Si cet attribut vaut false, la propriété ne peut pas être supprimée, ne peut pas être changée en propriété d'accesseur et les attributs en dehors de [[Value]] et [[Writable]] ne pourront pas être changés.
|
false |
| Attribut | Type | Description |
|---|---|---|
Read-only |
Booléen | État symétrique pour l'attribut ES5 [[Writable]]. |
DontEnum |
Booléen | État symétrique pour l'attribut ES5 [[Enumerable]]. |
DontDelete |
Booléen | État symétrique pour l'attribut ES5 [[Configurable]]. |
Ces propriétés associent une clé avec une ou deux fonctions accesseur et mutateur (respectivement get et set) qui permettent de récupérer ou d'enregistrer une valeur.
Note : Il est important de noter qu'on parle de propriété d'accesseur et pas de méthode. On peut donner des accesseurs semblables à ceux d'une classe à un objet en utilisant une fonction comme valeur d'une propriété mais ça ne fait pas de l'objet une classe.
Elles possèdent les attributs suivants :
| Attribut | Type | Description | Valeur par défaut |
|---|---|---|---|
[[Get]] |
Un objet Function ou undefined |
La fonction qui est appelée sans argument afin de récupérer la valeur de la propriété quand on souhaite y accéder. Voir aussi la page sur get. |
undefined |
[[Set]] |
Un objet Function ou undefined |
La fonction, appelée avec un argument qui contient la valeur qu'on souhaite affecter à la valeur et qui est exécutée à chaque fois qu'on souhaite modifier la valeur. Voir aussi la page sur set. |
undefined |
[[Enumerable]] |
Booléen | S'il vaut true, la propriété sera listée dans les boucles for…in. |
false |
[[Configurable]] |
Booléen | S'il vaut false, la propriété ne pourra pas être supprimée et ne pourra pas être transformée en une propriété de données. |
false |
Un objet JavaScript est un ensemble de correspondances entre des clés et des valeurs. Les clés sont représentées par des chaînes ou des symboles (Symbol). Les valeurs peuvent être de n'importe quel type. Grâce à cela, les objets peuvent, naturellement, être utilisés comme tables de hachage.
Les fonctions sont des objets classiques à la seule différence qu'on peut les appeler.
Lorsqu'on souhaite représenter 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 numérotées et qui ont une relation particulière avec la propriété length.
De plus, les tableaux héritent de Array.prototype qui permet de bénéficier de plusieurs méthodes pour manipuler les tableaux. Par exemple, indexOf() qui permet de rechercher une valeur dans le tableau ou push() qui permet d'ajouter un élément au tableau. Les tableaux sont donc indiqués quand on souhaite représenter des listes de valeurs ou d'objets.
Les tableaux typés (Typed Arrays en anglais) ont été ajoutés avec ECMAScript 2015 et offrent une vue sous forme d'un tableau pour manipuler des tampons de données binaires. Le tableau qui suit illustre les types de données équivalents en C :
| Type | Intervalle | Taille (exprimée en octets) | Description | Type Web IDL | Type équivalent en C |
Int8Array |
-128 à 127 | 1 | Entier signé en complément à 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 complément à 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 complément à 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 représentation IEEE (7 chiffres significatifs). | unrestricted float |
float |
Float64Array |
5.0x10^-324 à 1.8x10^308 | 8 | Nombre flottant sur 64 bits selon la représentation IEEE (16 chiffres significatifs). | unrestricted double |
double |
BigInt64Array |
-2^63 à 2^63-1 | 8 | Nombre entier signé sur 64 bits en complément à 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 données utilisent des clés pour référencer des objets. Elles ont été introduites avec ECMAScript 2015. Set et WeakSet représentent des ensembles d'objets, Map et WeakMap associent une valeur à un objet.
Il est possible d'énumérer 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 mémoire et le travail du ramasse-miettes.
Il est possible d'implémenter des objets Map et Set grâce à ECMAScript 5. Cependant, comme les objets ne peuvent pas être comparés (avec une relation d'ordre par exemple), la complexité obtenue pour rechercher un élément serait nécessairement linéaire. Les implémentations natives (y compris celle des WeakMap) permettent d'obtenir des performances logarithmiques voire constantes.
Généralement, si on voulait lier des données à un nœud DOM, on pouvait utiliser les attributs data-* ou définir les propriétés à un même l'objet. Malheureusement, cela rendait les données disponibles à n'importe quel script fonctionnant dans le même contexte. Les objets Map et WeakMap permettent de gérer plus simplement une liaison « privée » entre des données et un objet.
JSON (JavaScript Object Notation) est un format d'échange de données léger, dérivé de JavaScript et utilisé par plusieurs langages de programmation. JSON permet ainsi de construire des structures de données universelles pouvant être échangées entre programmes.
Pour plus d'informations, voir la page du glossaire et la page sur JSON.
JavaScript possède une bibliothèque standard d'objets natifs. Veuillez lire la référence pour en savoir plus sur ces objets.
typeofL'opérateur typeof peut vous aider à déterminer le type d'une variable. Pour plus d'informations et sur les cas particuliers, voir la page de référence sur cet opérateur.
Cette page a été modifiée le par les contributeur·ice·s du MDN.