String : méthode codePointAt()
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 septembre 2015.
La méthode codePointAt() des valeurs String retourne un entier positif qui est la valeur du point de code Unicode du caractère commençant à l'indice donné. Notez que l'indice est toujours basé sur les unités de code UTF-16, et non sur les points de code Unicode.
Exemple interactif
const icons = "☃★♲";
console.log(icons.codePointAt(1));
// Résultat attendu : "9733"
Syntaxe
codePointAt(index)
Paramètres
index-
Un indice à partir de zéro du caractère à retourner. Converti en entier —
undefinedest converti en 0.
Valeur de retour
Un entier qui n'est pas négatif représentant la valeur du point de code du caractère à un index donné.
- Si
indexest en dehors de la plage de0àstr.length - 1,codePointAt()retourneundefined. - Si l'élément à
indexest un substitut principal UTF-16, retourne le point de code du paire de substituts. - Si l'élément à
indexest un substitut secondaire UTF-16, retourne seulement l'unité de code du substitut secondaire.
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 d'une chaîne de caractères appelée str est str.length - 1.
Les points de code Unicode vont de 0 à 1114111 (0x10FFFF). En UTF-16, chaque indice de chaîne est une unité de code avec une valeur comprise entre 0 et 65535. Les points de code plus élevés sont représentés par une paire de pseudo-caractères substituts de 16 bits. Par conséquent, codePointAt() retourne un point de code qui peut s'étendre sur deux indices de chaîne de caractères. Pour plus d'informations sur Unicode, voir Caractères UTF-16, points de code Unicode et grappes de graphèmes.
Exemples
>Utiliser la méthode codePointAt()
"ABC".codePointAt(0); // 65
"ABC".codePointAt(0).toString(16); // 41
"😍".codePointAt(0); // 128525
"\ud83d\ude0d".codePointAt(0); // 128525
"\ud83d\ude0d".codePointAt(0).toString(16); // 1f60d
"😍".codePointAt(1); // 56845
"\ud83d\ude0d".codePointAt(1); // 56845
"\ud83d\ude0d".codePointAt(1).toString(16); // de0d
"ABC".codePointAt(42); // undefined
Boucler avec codePointAt()
Comme l'utilisation des indices de chaîne de caractères pour boucler fait que le même point de code est visité deux fois (une fois pour le substitut principal, une fois pour le substitut secondaire), et que la deuxième fois codePointAt() ne retourne que le substitut secondaire, il est préférable d'éviter de boucler par indice.
const str = "\ud83d\udc0e\ud83d\udc71\u2764";
for (let i = 0; i < str.length; i++) {
console.log(str.codePointAt(i).toString(16));
}
// '1f40e', 'dc0e', '1f471', 'dc71', '2764'
Au lieu de cela, utilisez une instruction for...of ou étalez la chaîne de caractères, qui invoquent toutes deux le [Symbol.iterator]() de la chaîne de caractères, qui itère par points de code. Ensuite, utilisez codePointAt(0) pour obtenir le point de code de chaque élément.
for (const codePoint of str) {
console.log(codePoint.codePointAt(0).toString(16));
}
// '1f40e', '1f471', '2764'
[...str].map((cp) => cp.codePointAt(0).toString(16));
// ['1f40e', '1f471', '2764']
Spécifications
| Spécification |
|---|
| ECMAScript® 2027 Language Specification> # sec-string.prototype.codepointat> |
Compatibilité des navigateurs
Voir aussi
- La prothèse d'émulation (polyfill en anglais) de
String.prototype.codePointAtdanscore-js(angl.) - La prothèse d'émulation (polyfill en anglais) es-shims de
String.prototype.codePointAt(angl.) - La méthode statique
String.fromCodePoint() - La méthode statique
String.fromCharCode() - La méthode
String.prototype.charCodeAt() - La méthode
String.prototype.charAt()