Une valeur en JavaScript est toujours dâun certain type. Par exemple, une chaîne de caractères ou un nombre.
Il existe huit types de données de base en JavaScript. Ici, nous les couvrirons en général et dans les prochains chapitres, nous parlerons de chacun dâeux en détail.
Nous pouvons mettre nâimporte quel type dans une variable. Par exemple, une variable peut à un moment être une chaîne de caractères puis stocker un nombre :
// pas d'erreur
let message = "hello";
message = 123456;
Les langages de programmation qui permettent de telles choses sont appelés âtypés dynamiquementâ, ce qui signifie quâil existe des types de données, mais que les variables ne sont liées à aucun dâentre eux.
Number
let n = 123;
n = 12.345;
Le type number sert à la fois à des nombres entiers et à des nombres à virgule flottante.
Il existe de nombreuses opérations pour les nombres, par ex. multiplication *, division /, addition +, soustraction - et ainsi de suite.
Outre les nombres réguliers, il existe des âvaleurs numériques spécialesâ qui appartiennent également à ce type: Infinity, -Infinity et NaN.
-
Infinityreprésente lâInfini â mathématique. Câest une valeur spéciale qui est plus grande que nâimporte quel nombre.Nous pouvons lâobtenir à la suite dâune division par zéro :
alert( 1 / 0 ); // InfinityOu mentionnez-le simplement dans le code directement :
alert( Infinity ); // Infinity -
NaNreprésente une erreur de calcul. Câest le résultat dâune opération mathématique incorrecte ou non définie, par exemple :alert( "pas un nombre" / 2 ); // NaN, une telle division est erronéeNaNest contagieux. Toute autre opération surNaNdonnerait unNaN:alert( NaN + 1 ); // NaN alert( 3 * NaN ); // NaN alert( "not a number" / 2 - 1 ); // NaNDonc, sâil y a
NaNquelque part dans une expression mathématique, il se propage à lâensemble du résultat (il nây a quâune seule exception :NaN ** 0vaut1).
Faire des maths est sans danger en JavaScript. Nous pouvons faire nâimporte quoi : diviser par zéro, traiter les chaînes non numériques comme des nombres, etc.
Le script ne sâarrêtera jamais avec une erreur fatale (âdieâ). Au pire, nous aurons NaN comme résultat.
Les valeurs numériques spéciales appartiennent formellement au type ânumberâ. Bien sûr, ce ne sont pas des nombres au sens commun de ce mot.
Nous allons en voir plus sur le travail avec les nombres dans le chapitre Nombres.
BigInt
En JavaScript, le type ânumberâ ne peut pas représenter des valeurs entières supérieures à (253-1) (câest 9007199254740991), ou moins que -(253-1) pour les chiffres négatifs. Câest une limitation technique causée par leur représentation interne.
Pour être vraiment précis, le type ânumberâ peut stocker des entiers plus grands (jusquâà 1.7976931348623157 * 10308), mais en dehors de la plage dâentiers sûrs ±(2 53-1) il y aura une erreur de précision, car tous les chiffres ne rentrent pas dans le stockage 64 bits fixe. Ainsi, une valeur âapproximativeâ peut être stockée.
Par exemple, ces deux nombres (juste au-dessus de la plage de sécurité) sont identiques :
console.log(9007199254740991 + 1); // 9007199254740992
console.log(9007199254740991 + 2); // 9007199254740992
Ainsi, tous les entiers impairs supérieurs à (253-1) ne peuvent pas du tout être stockés dans le type ânumberâ.
Dans la plupart des cas, la plage ±(253-1) est tout à fait suffisante, mais parfois nous avons besoin de toute la plage de très grands nombres entiers, par ex. pour la cryptographie ou les horodatages de précision à la microseconde.
BigInt a récemment été ajouté au langage pour représenter des entiers de longueur arbitraire.
Une valeur BigInt est créé en ajoutant n à la fin dâun entier :
// le "n" Ã la fin signifie que c'est un BigInt
const bigInt = 1234567890123456789012345678901234567890n;
Comme les chiffres BigInt sont rarement nécessaires, nous leur avons consacré un chapitre dédié BigInt. Lisez-le lorsque vous avez besoin dâaussi gros chiffres.
à lâheure actuelle, BigInt est pris en charge dans Firefox/Chrome/Edge/Safari, mais pas dans IE.
You can check MDN BigInt compatibility table to know which versions of a browser are supported.
String
Une chaîne de caractères en JavaScript doit être entre guillemets.
let str = "Hello";
let str2 = 'Single quotes are ok too';
let phrase = `can embed another ${str}`;
En JavaScript, il existe 3 types de guillemets.
- Double quotes:
"Hello". - Single quotes:
'Hello'. - Backticks:
`Hello`.
Les guillemets simples et doubles sont des guillemets âsimplesâ. Il nây a pratiquement pas de différence entre eux en JavaScript.
Les backticks sont des guillemets âà fonctionnalité étendueâ. Ils nous permettent dâintégrer des variables et des expressions dans une chaîne en les encapsulant dans ${â¦}, par exemple :
let name = "John";
// une variable encapsulée
alert( `Hello, ${name}!` ); // Hello, John!
// une expression encapsulée
alert( `the result is ${1 + 2}` ); // le résultat est 3
Lâexpression à lâintérieur de ${â¦} est évaluée et le résultat devient une partie de la chaîne. On peut y mettre nâimporte quoi : une variable comme name ou une expression arithmétique comme 1 + 2 ou quelque chose de plus complexe.
Veuillez noter que cela ne peut être fait que dans les backticks. Les autres guillemets ne permettent pas une telle intégration !
alert( "the result is ${1 + 2}" ); // le résultat est ${1 + 2} (les doubles quotes ne font rien)
Nous couvrirons les chaînes de caractères plus en détails dans le chapitre Strings.
Dans certains langages, il existe un type spécial âcharacterâ pour un seul caractère. Par exemple, en langage C et en Java, il sâagit de âcharâ.
En JavaScript, ce type nâexiste pas. Il nây a quâun seul type: string. Une chaîne de caractères peut être composée de zéro caractère (être vide), dâun caractère ou de plusieurs dâentre eux.
Boolean (type logique)
Le type booléen nâa que deux valeurs: true et false.
Ce type est couramment utilisé pour stocker des valeurs oui / non: true signifie âoui, correctâ et false signifie ânon, incorrectâ.
Par exemple :
let nameFieldChecked = true; // oui, le champ de nom est coché
let ageFieldChecked = false; // non, le champ d'âge n'est pas coché
Les valeurs booléennes résultent également de comparaisons :
let isGreater = 4 > 1;
alert( isGreater ); // true (le résultat de la comparaison est "oui")
Nous couvrirons plus profondément les booléens plus tard dans le chapitre Opérateurs logiques.
La valeur ânullâ
La valeur spéciale null nâappartient à aucun type de ceux décrits ci-dessus.
Il forme un type bien distinct qui ne contient que la valeur null :
let age = null;
En JavaScript, null nâest pas une âréférence à un objet non existantâ ou un âpointeur nulâ comme dans dâautres langages.
Câest juste une valeur spéciale qui a le sens de ârienâ, âvideâ ou âvaleur inconnueâ.
Le code ci-dessus indique que lâage est inconnu.
La valeur âundefinedâ
La valeur spéciale undefined se distingue des autres. Câest un type à part entière, comme null.
La signification de undefined est âla valeur nâest pas attribuéeâ.
Si une variable est déclarée mais non affectée, alors sa valeur est exactement undefined :
let age;
alert(age); // affiche "undefined"
Techniquement, il est possible dâaffecter explicitement undefined à une variable :
let age = 100;
// change the value to undefined
age = undefined;
alert(age); // "undefined"
⦠Mais il nâest pas recommandé de faire cela. Normalement, nous utilisons null pour assigner une valeur âvideâ ou âinconnueâ à une variable, tandis que undefined est réservé comme valeur initiale par défaut pour les éléments non attribués.
Objects et Symbols
Le type object est spécial.
Tous les autres types sont appelés âprimitifsâ, car leurs valeurs ne peuvent contenir quâune seule chose (que ce soit une chaîne de caractères, un nombre ou autre). à contrario, les objets servent à stocker des collections de données et des entités plus complexes.
Ãtant aussi important, les objets méritent un traitement spécial. Nous les traiterons plus tard dans le chapitre Objets, après en savoir plus sur les primitifs.
Le type symbol est utilisé pour créer des identificateurs uniques pour les objets. Nous devons le mentionner ici par souci dâexhaustivité, mais nous allons le voir en détails après avoir étudié les objets.
L'opérateur typeof
Lâopérateur typeof renvoie le type de lâopérande. Il est utile lorsquâon souhaite traiter différemment les valeurs de différents types ou de faire une vérification rapide.
Lâappel typeof x renvoie une chaîne de caractères avec le nom du type :
typeof undefined // "undefined"
typeof 0 // "number"
typeof 10n // "bigint"
typeof true // "boolean"
typeof "foo" // "string"
typeof Symbol("id") // "symbol"
typeof Math // "object" (1)
typeof null // "object" (2)
typeof alert // "function" (3)
Les trois dernières lignes peuvent nécessiter des explications supplémentaires :
Mathest un objet interne au langage qui fournit des opérations mathématiques. Nous allons lâapprendre dans le chapitre Nombres. Ici, il sert uniquement comme exemple dâun objet.- Le résultat de
typeof nullest"object". Câest une erreur officiellement reconnue danstypeof, datant des premiers jours de JavaScript et conservée pour compatibilité. Bien sûr,nullnâest pas un objet. Câest une valeur spéciale avec un type distinct qui lui est propre. Le comportement detypeofest incorrect ici. - Le résultat de
typeof alertest"function", caralertest une fonction. Nous étudierons les fonctions dans les chapitres suivants, et nous verrons quâil nây a pas de type âfonctionâ en JavaScript. Les fonctions appartiennent au typeobjectmaistypeofles traite différemment en retournant"function". Cela vient également des débuts de JavaScript. Techniquement ce nâest pas tout à fait correct, mais très pratique à lâusage.
typeof(x)Vous pouvez également rencontrer une autre syntaxe : typeof(x). Câest la même chose que typeof x.
Pour être clair : typeof est un opérateur, pas une fonction. Les parenthèses ici ne font pas partie de typeof. Câest le genre de parenthèses utilisées pour le regroupement mathématique.
Habituellement, ces parenthèses contiennent une expression mathématique, telle que (2 + 2), mais ici elles ne contiennent quâun seul argument (x). Syntaxiquement, ils permettent dâéviter un espace entre lâopérateur typeof et son argument, et certains aiment ça.
Certaines personnes préfèrent typeof(x), bien que la syntaxe typeof x soit beaucoup plus courante.
Résumé
Il existe 8 types de données de base en JavaScript.
- Sept types de données primitifs :
numberpour les nombres de toute nature : entier ou virgule flottante, les nombres entiers sont limités ñ(253-1).bigintpour des nombres entiers de longueur arbitraire.stringpour les chaînes de caractères. Une chaîne de caractères peut avoir zéro ou plusieurs caractères, il nây a pas de type à caractère unique distinct.booleanpourtrue/false(vrai/faux).nullpour les valeurs inconnues â un type autonome qui a une seule valeurnull.undefinedpour les valeurs non attribuées â un type autonome avec une valeur uniqueundefined.symbolpour les identifiants uniques.
- Et un type de données non primitif :
objectpour des structures de données plus complexes.
Lâopérateur typeof nous permet de voir quel type est stocké dans la variable.
- Généralement utilisé sous cette forme
typeof x, maistypeof(x)est également possible. - Renvoie une chaîne de caractères avec le nom du type, comme
"string". - Pour
nullil renvoie"object"â Câest une erreur dans le langage, ce nâest pas un objet en fait.
Dans les chapitres suivants, nous nous concentrerons sur les valeurs primitives et une fois que nous les connaîtrons, nous passerons aux objets.
Commentaires
<code>, pour plusieurs lignes â enveloppez-les avec la balise<pre>, pour plus de 10 lignes - utilisez une sandbox (plnkr, jsbin, codepenâ¦)