Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

String : méthode charCodeAt()

Baseline
Large disponibilité

Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.

La méthode charCodeAt() des valeurs String retourne un entier compris entre 0 et 65535 représentant le codet UTF-16 à l'indice donné.

charCodeAt() indexe la chaîne de caractères comme une séquence de unités de code UTF-16, donc elle peut retourner des substituts isolés. Pour obtenir le point de code Unicode complet à l'indice donné, utilisez String.prototype.codePointAt().

Exemple interactif

const sentence = "Le rapide renard brun saute par-dessus le chien paresseux.";

const index = 4;

console.log(
  `Le code du caractère ${sentence.charCodeAt(index)} est égal à ${sentence.charAt(
    index,
  )}`,
);
// Résultat attendu : "Le code du caractère 113 est égal à q"

Syntaxe

js
charCodeAt(index)

Paramètres

index

Un entier représentant l'indice basé sur zéro du caractère à retourner. Converti en entier — undefined est converti en 0.

Valeur de retour

Un entier compris entre 0 et 65535 représentant la valeur de l'unité de code UTF-16 du caractère à un index défini. Si index est en dehors de la plage de 0 à str.length - 1, charCodeAt() retourne NaN.

Description

Les caractères dans une chaîne de caractères sont indexés de gauche à droite. L'indice du premier caractère est 0, et l'indice du dernier caractère dans une chaîne de caractères appelée str est str.length - 1.

Les points de code Unicode vont de 0 à 1114111 (0x10FFFF). charCodeAt() retourne toujours une valeur inférieure à 65536, car les points de code plus élevés sont représentés par une paire de pseudo-caractères sur 16 bits appelés substituts. Par conséquent, pour obtenir un caractère complet dont la valeur est supérieure à 65535, il est nécessaire de récupérer non seulement charCodeAt(i), mais aussi charCodeAt(i + 1) (comme si l'on manipule une chaîne de caractères qui a deux caractères), ou d'utiliser codePointAt(i) à la place. Pour plus d'informations sur Unicode, voir Caractères UTF-16, points de code Unicode et groupes de graphèmes.

Exemples

Utiliser la méthode charCodeAt()

L'exemple suivant retourne 65, la valeur Unicode de A.

js
"ABC".charCodeAt(0); // retourne 65

charCodeAt() peut retourner des substituts isolés, qui ne sont pas des caractères Unicode valides.

js
const chaine = "𠮷𠮾";
console.log(chaine.charCodeAt(0)); // 55362, ou d842, qui n'est pas un caractère Unicode valide
console.log(chaine.charCodeAt(1)); // 57271, ou dfb7, qui n'est pas un caractère Unicode valide

Pour obtenir le point de code Unicode complet à l'indice donné, utilisez String.prototype.codePointAt().

js
const chaine = "𠮷𠮾";
console.log(chaine.codePointAt(0)); // 134071

Note : Évitez de réimplémenter codePointAt() en utilisant charCodeAt(). La conversion des substituts UTF-16 en points de code Unicode est complexe, et codePointAt() peut être plus performant, car il utilise directement la représentation interne de la chaîne de caractères. Installez une prothèse d'émulation pour codePointAt() si nécessaire.

Voici un algorithme possible pour convertir une paire d'unités de code UTF-16 en un point de code Unicode, adapté de la FAQ Unicode (angl.) :

js
// constantes
const LEAD_OFFSET = 0xd800 - (0x10000 >> 10);
const SURROGATE_OFFSET = 0x10000 - (0xd800 << 10) - 0xdc00;

function utf16ToUnicode(lead, trail) {
  return (lead << 10) + trail + SURROGATE_OFFSET;
}
function unicodeToUTF16(codePoint) {
  const lead = LEAD_OFFSET + (codePoint >> 10);
  const trail = 0xdc00 + (codePoint & 0x3ff);
  return [lead, trail];
}

const str = "𠮷";
console.log(utf16ToUnicode(str.charCodeAt(0), str.charCodeAt(1))); // 134071
console.log(str.codePointAt(0)); // 134071

Spécifications

Spécification
ECMAScript® 2027 Language Specification
# sec-string.prototype.charcodeat

Compatibilité des navigateurs

Voir aussi