définition
Une chaîne est zéro ou plus de caractères disposés ensemble, placés en citations simples ou doubles.
'ABC' "ABC"Les citations doubles peuvent être utilisées dans une seule chaîne de devis. À l'intérieur d'une chaîne de devis double, des citations simples peuvent être utilisées.
'key = "valeur"' "C'est un long voyage"
Les deux ci-dessus sont des chaînes légales.
Si vous souhaitez utiliser des devis simples à l'intérieur d'une seule chaîne de devis (ou des citations doubles à l'intérieur d'une chaîne de devis double), vous devez préfixer la citation unique (ou doubles citations) à l'intérieur pour s'échapper.
"A-t-elle dit /" bonjour / "?
Étant donné que les valeurs d'attribut de la langue HTML utilisent des devis doubles, de nombreux projets conviennent que les chaînes de langue JavaScript n'utilisent que des devis uniques et ce didacticiel suit cette convention. Bien sûr, il est également parfait pour utiliser des citations doubles uniquement. Il est important de s'en tenir à un style et de ne pas mélanger les deux styles.
Par défaut, les chaînes ne peuvent être écrites qu'en une seule ligne, et si elles sont divisées en plusieurs lignes, elles rapporteront une erreur.
'ABC' // Syntaxerror: jeton inattendu illégal
Le code ci-dessus divise une chaîne en trois lignes, et JavaScript rapportera une erreur.
Si une longue chaîne doit être divisée en plusieurs lignes, une barre arrière peut être utilisée à la fin de chaque ligne.
var longstring = "long / long / long / string"; longstring // "string long long long"
Le code ci-dessus montre qu'après avoir ajouté une barre oblique inverse, la chaîne écrite à l'origine sur une ligne peut être divisée en plusieurs lignes d'écriture. Cependant, lors de la sortie, l'effet est toujours une seule ligne, et l'effet est exactement le même que l'écriture sur la même ligne. Notez que l'arrière-plan doit être suivi d'un caractère Newline, et il ne doit y avoir aucun autre caractères (tels que des espaces), sinon une erreur sera signalée.
L'opérateur de concaténation (+) peut concaténer plusieurs chaînes à une seule ligne, diviser la longue chaîne en plusieurs lignes pour écrire, et c'est aussi une seule ligne lors de la sortie.
var longstring = 'long' + 'long' + 'long' + 'string';
Si vous souhaitez produire des chaînes multi-lignes, il existe une solution de contournement pour utiliser des commentaires multi-lignes.
(function () {/ * line 1line 2line 3 * /}). toString (). Split ('/ n'). Slice (1, -1) .join ('/ n') // "Ligne 1 // ligne 2 // ligne 3"Dans l'exemple ci-dessus, la chaîne de sortie est plusieurs lignes.
S'échapper
BackSlash (/) a une signification particulière dans une chaîne et est utilisé pour représenter des caractères spéciaux, il est donc également appelé un personnage d'évasion.
Les caractères spéciaux qui doivent être échappés avec des barreaux sont principalement les suivants:
Les caractères ci-dessus sont précédés par des barres à barres, qui représentent toutes des significations spéciales.
console.log ('1 / n2') // 1 // 2Dans le code ci-dessus, / n signifie une nouvelle ligne, et elle est divisée en deux lignes lors de la sortie.
Il y a trois utilisations spéciales pour les barreaux réformes.
(1) / HHHH
La barre oblique inverse est suivie de trois nombres octaux (000 à 377), représentant un caractère. HHH correspond au point de code Unicode du caractère correspondant, tel que / 251 représente le symbole du droit d'auteur. De toute évidence, cette méthode ne peut produire que 256 caractères.
(2) / xhh
/ x est suivi de deux nombres hexadécimaux (00 à ff), représentant un caractère. HH correspond au point de code Unicode du caractère, tel que / xa9 représente le symbole du droit d'auteur. Cette méthode ne peut sortir que 256 caractères.
(3) / uxxxxx
/ u est suivi de quatre nombres hexadécimaux (0000 à FFFF), représentant un personnage. HHHHH correspond au point de code Unicode du caractère, tel que / u00a9 représente le symbole du droit d'auteur.
Vous trouverez ci-dessous des exemples de ces trois caractères spéciaux écrits en détail.
'/ 251' // "©" '/ xa9' // "©" '/ u00a9' // "©" '/ 172' === 'Z' // true '/ x7a' === 'z' // true '/ u007a' === 'Z' // true
Si une barre oblique inverse est utilisée avant un caractère non spécial, la barre oblique inverse est omise.
'/ a' // "a"
Dans le code ci-dessus, A est un caractère normal, et il n'y a aucune signification particulière pour ajouter une barre arrière avant elle, et la barre oblique inverse sera automatiquement omise.
Si la barre oblique inverse doit être incluse dans le contenu normal de la chaîne, une autre barre oblique inverse doit être ajoutée avant l'arrière-plan pour s'échapper.
"Prev // suivant" // "Précédent / suivant"
Cordes et tableaux
Une chaîne peut être traitée comme un tableau de caractères, de sorte que l'opérateur de support carré du tableau peut être utilisé pour retourner les caractères à une certaine position (le numéro de position commence à 0).
var s = 'hello'; s [0] // "h" s [1] // "e" s [4] // "o" // Utilisez l'opérateur de support carré 'Hello' [1] // "e"
Si le nombre entre crochets dépasse la longueur de la chaîne, ou si le nombre entre crochets n'est pas du tout, non défini est renvoyé.
'ABC' [3] // Undefined'abc '[- 1] // Undefined'abc' ['x'] // Undefined
Cependant, il s'agit de la similitude entre les chaînes et les tableaux. En fait, il est impossible de changer un seul caractère dans une chaîne.
var s = 'hello'; supprimer s [0]; s // "bonjour" s [1] = 'a'; s // "Bonjour" S [5] = '!'; S // "Hello"
Le code ci-dessus indique que les caractères individuels à l'intérieur d'une chaîne ne peuvent pas être modifiés, ajoutés ou supprimés, et ces opérations échoueront silencieusement.
La raison pour laquelle les chaînes sont similaires aux tableaux de caractères est en fait parce que lors de l'exécution du fonctionnement du support carré sur les chaînes, la chaîne sera automatiquement convertie en un objet de chaîne.
attribut de longueur
L'attribut de longueur renvoie la longueur de la chaîne, qui ne peut pas être modifiée.
var s = 'hello'; s.length // 5s.length = 3; s.length // 5s.length = 7; s.length // 5
Le code ci-dessus indique que l'attribut de longueur de la chaîne ne peut pas être modifié, mais il n'y aura pas d'erreurs.
Jeu de caractères
JavaScript utilise des ensembles de caractères Unicode, ce qui signifie que dans JavaScript, tous les caractères sont représentés par Unicode.
Non seulement JavaScript utilise Unicode pour stocker des caractères en interne, mais Unicode peut également être utilisé directement dans le programme. Tous les caractères peuvent être écrits sous la forme de "/ uxxxx", où xxxx représente le codage Unicode du caractère. Par exemple, / u00a9 représente un symbole de copyright.
var s = '/ u00a9'; s // "©"
Chaque caractère est stocké dans le format UTF-16 16 bits (c'est-à-dire 2 octets) à l'intérieur de JavaScript. C'est-à-dire que la longueur du caractère de l'unité de JavaScript est fixée à une longueur 16 bits, c'est-à-dire 2 octets.
Cependant, UTF-16 a deux longueurs: pour les caractères entre U + 0000 et U + FFFF, la longueur est de 16 bits (c'est-à-dire 2 octets); Pour les caractères entre U + 10000 et U + 10FFFF, la longueur est de 32 bits (c'est-à-dire 4 octets), et les deux premiers octets sont comprises entre 0xd800 et 0xdbff, et les deux derniers octets se situent entre 0xdc00 et 0xdfff. Par exemple, le caractère correspondant de U + 1D306 est ?, et il est écrit comme UTF-16, qui est 0xd834 0xdf06. Le navigateur reconnaîtra correctement ces quatre octets comme un seul caractère, mais la longueur du caractère à l'intérieur de JavaScript est toujours fixée à 16 bits, et ces quatre octets seront traités comme deux caractères.
var s = '/ ud834 / udf06'; s // "?" s.length // 2 /^.$/. Test (s) // falses.charat (0) // "" s.charat (1) // "" s.charcodeat (0) // 55348s.charat (1) // 57094
Le code ci-dessus montre que pour les caractères entre U + 10000 et U + 10FFFF, JavaScript est toujours traité comme deux caractères (l'attribut de longueur du caractère est 2). L'expression régulière utilisée pour correspondre à un seul caractère échouera (JavaScript estime que plus d'un caractère est ici), la méthode Charat ne peut pas renvoyer un seul caractère et la méthode Charcodeat renvoie la valeur décimale correspondant à chaque octet.
Par conséquent, lorsqu'il s'agit de cela, cela doit être pris en compte. Pour les caractères Unicode de 4 octets, en supposant que C est le nombre Unicode du caractère, H est les deux premiers octets et L est les deux derniers octets, la relation de conversion entre eux est la suivante.
// convertir des caractères plus grands que U + ffffff d'Unicode à UTF-16h = math.floor ((C - 0x10000) / 0x400) + 0xd800l = (C - 0x10000)% 0x400 + 0xdc00 // CONTRUTES CARACTÈRES plus grandes que U + FFFFF de UTF-16 à Unicodec = (H - 0xd800) * 0x400 + 0x10000
L'expression régulière suivante peut reconnaître tous les caractères UTF-16.
([/ 0- / ud7ff / ue000- / ufff] | [/ ud800- / udbff] [/ udc00- / udff])
Étant donné que le moteur JavaScript (à proprement parler, spécification ES5) ne peut pas reconnaître automatiquement les caractères Unicode du plan auxiliaire (nombre supérieur à 0xFFFF), toutes les fonctions de traitement des chaînes produiront des résultats incorrects lors de la rencontre de ces caractères. Si vous souhaitez effectuer des opérations liées à la chaîne, vous devez déterminer si les caractères se situent dans la plage de 0xd800 à 0xdfff.
Vous trouverez ci-dessous une fonction qui peut gérer correctement la traversée de chaîne.
fonction getSymbols (string) {var longueur = string.length; var index = -1; Var Output = []; Caractère var; var charcode; while (++ index <longueur) {caractères = string.charat (index); charcode = caractères.CharCodeat (0); if (charcode> = 0xd800 && charcode <= 0xdbff) {output.push (caractères + string.charat (++ index)); } else {output.push (caractères); }} return output;} var symbols = getymbols ('?'); symbols.ForEach (function (symbol) {// ...});D'autres opérations de chaîne telles que le remplacement (string.prototype.replace), Intercept substring (string.prototype.substring, string.prototype.slice) doivent être gérées de manière similaire.
Base64 Transcoding
Base64 est une méthode de codage qui peut convertir n'importe quel caractère en caractères imprimables. Cette méthode d'encodage est principalement utilisée pour ne pas crypter, mais pour éviter les caractères spéciaux et simplifier le traitement du programme.
JavaScript fournit nativement deux méthodes liées à la base64.
var string = 'Hello world!'; btoa (string) // "sgvsbg8gv29ybgqh" atob ('sgvsbg8gv29ybgqh') // "bonjour world!" Ces deux méthodes ne conviennent pas aux caractères non ASCII et rapporteront une erreur. BTOA ('Hello') // UNCAPAPT DOMException: La chaîne à coder contient des caractères en dehors de la gamme Latin1. Pour convertir les caractères non ASCII en codage de base64, un lien de transcodage doit être inséré au milieu, puis ces deux méthodes sont utilisées. fonction b64encode (str) {return btoa (encodeuRICPonent (str));} function b64decode (str) {return decodeuRIComponent (atoB (str));} b64encode ('hello') // "JUU0JUJEJUEWJUU1JUE1JUJE" B64DECODE ('JUU0JUJEJUEWJUU1JUE1JUJE') // "Hello"