Maison >interface Web >js tutoriel >Terminations de ligne en JavaScript
J'ai passé une grande partie de la journée à me battre avec des fins de ligne en JavaScript, et j'ai finalement révélé des résultats qui méritent d'être partagés - ne serait-ce que pour sauver d'autres développeurs de la descente dans le même trou noir de débogage.
Comme vous le savez peut-être, l'humble rupture de ligne a en fait trois formes selon le système d'exploitation qui fait la rupture. Sur Unix Machines, un seul personnage de Newline «N» fait le travail. Sur les Mac, un retour en chariot «R» est utilisé. DOS et Windows utilisent les deux: «RN». C'est l'un de ces problèmes relativement subtils qui peuvent vous mordre fort si vous ne savez pas quoi rechercher.
Aujourd'hui, j'ai été chargé du simple problème de construire une fonction JavaScript pour transformer les Newlines simples pour double Newlines dans une TextArea. Ma première tentative ressemblait à ceci:
var DoubleNewlinesre = / ([^ n]) n ([^ n]) / g; fonction DoubleNewlines (obj) { obj.value = obj.value.replace (DoubleNewlinesre, "1 $ NN 2"); } Double Newlines
Le code ci-dessus utilise une expression régulière simple qui trouve toutes les instances de quelque chose qui n'est pas une nouvelle ligne, suivie d'une nouvelle ligne, suivie de quelque chose d'autre qui n'est pas une nouvelle ligne. Les instances de ce modèle sont ensuite remplacées par le même motif par deux nouvelles lignes au milieu au lieu d'un.
Cela a bien fonctionné dans Firefox sur Windows, Linux et Mac car Firefox traite Newlines comme «N» quelle que soit la plate-forme sur laquelle il fonctionne. Il a brisé sur IE pour Windows et IE pour Macintosh parce que ces navigateurs utilisent respectivement «RN» et «R».
assez juste. La solution habituelle à ce problème consiste à normaliser les terminaisons de ligne avant d'exécuter la conversion, en remplaçant chacune des trois combinaisons par la fin unique de votre préférence (dans mon cas «N»). Voici ma deuxième tentative de fonction:
fonction DoubleNewlines (obj) { obj.value = obj.value.replace (/ (rn | r | n) / g, 'n'); obj.value = text.replace (DoubleNewlinesre, "1 $ NN 2"); }
Cela ne fonctionnait pas non plus. Après beaucoup de grattage, de débogage et de fouet avec des boîtes à alerte, j'ai finalement découvert une «fonctionnalité» sans papiers et presque obscure de l'esprit de façon engourdissante d'Internet Explorer: lorsque vous attribuez une chaîne à l'attribut de valeur d'un objet d'entrée, c'est-à-dire convertit silencieusement vos belles terminaisons de ligne ‘n’ ’à la préférence de la plate-forme. La documentation de Microsoft ne le note pas, mais j'ai confirmé que cela se produit sur les versions Windows et Mac d'Internet Explorer.
Bizzarely, si vous attribuez à l'attribut de valeur d'un objet de champ de formulaire caché, aucune conversion n'a lieu; Les fins de ligne ne sont modifiées que si vous affectez une zone de texte.
Le code suivant, bien que de fonction apparemment identique au code juste répertorié, fait exactement ce que je veux qu'il fasse:
fonction DoubleNewlines (obj) { var text = obj.value; text = text.replace (/ (rn | r | n) / g, 'n'); obj.value = text.replace (DoubleNewlinesre, "1 $ NN 2"); }
Cela fonctionne bien car la version normalisée est attribuée à une variable plutôt que d'être attribuée directement à l'attribut de valeur de l'objet TextArea - d'où la conversion de fin de ligne de ligne d'IE est retardée jusqu'à la fin du script et ne parvient pas à jouer à Havoc avec ma deuxième expression régulière.
Enfin, une note sur le style. Si je pensais à la réutilisation du code plutôt qu'à travailler rapidement pour résoudre un problème, j'aurais probablement trouvé quelque chose comme ceci:
fonction DoubleNewlines (texte) { text = text.replace (/ (rn | r | n) / g, 'n'); return text.replace (DoubleNewlinesre, "1 $ NN 2"); } Double Newlines
Bien que cela nécessite un peu plus de code dans le gestionnaire OnClick, abstraction uniquement de l'opération de chaîne que j'aurais complètement évité le problème de conversion de fin de ligne étrange. Pourtant, au moins je suis reparti avec la compréhension des autres petites bizarreries d'IE.
Les terminaisons de ligne en JavaScript sont cruciales car elles signifient la fin d'une instruction. En JavaScript, chaque instruction est séparée par un point-virgule (;). Cependant, les interprètes JavaScript sont assez intelligents pour insérer automatiquement les demi-terrains à la fin des lignes s'ils sont manquants. Cette fonctionnalité est connue sous le nom d'insertion automatique des demi-finales (ASI). Malgré cela, il est considéré comme une bonne pratique d'inclure manuellement les demi-colons pour éviter toute erreur potentielle ou résultats inattendus.
En JavaScript, vous pouvez ajouter une nouvelle ligne à l'aide de séquences d'évacuation. La séquence d’évasion pour une nouvelle ligne est «n». Par exemple, si vous souhaitez ajouter une nouvelle ligne entre deux phrases, vous pouvez le faire comme ceci: «Hellonworld». Lorsque cette chaîne est imprimée, «Hello» et «World» seront sur des lignes distinctes.
Dans JavaScript, «N» et «RN» sont tous les deux utilisés pour créer de nouvelles lignes. Cependant, ils sont utilisés différemment selon le système d'exploitation. «N» est utilisé comme personnage Newline dans les systèmes basés sur UNIX (comme Linux et Mac), tandis que «RN» est utilisé dans Windows. Le caractère «R» représente un retour chariot, qui déplace le curseur au début de la ligne sans passer à la ligne suivante.
Pour ajouter plusieurs pauses line en javascript, vous pouvez utiliser la séquence «n» à échapper plusieurs fois. Par exemple, «Hellonnworld» ajoutera deux pauses de ligne entre «bonjour» et «monde».
Oui, vous pouvez utiliser des balises HTML pour les pauses de ligne en JavaScript lorsque vous travaillez avec du contenu HTML. La balise «
» peut être utilisée pour ajouter une rupture de ligne. Par exemple, «Hello
World» ajoutera une rupture de ligne entre «bonjour» et «monde» lorsqu'il est affiché dans un document HTML.
En JavaScript, les terminaisons de ligne jouent un rôle important dans les commentaires. Les commentaires en une seule ligne dans JavaScript commencent par «//» et se terminent à la pause. Tout après «//» sur la même ligne est considéré comme un commentaire et ignoré par l'interprète JavaScript.
Dans les chaînes JavaScript, les terminaisons de ligne peuvent être manipulées en utilisant la séquence «n». Cette séquence insère un nouveau caractère dans la chaîne, créant efficacement une rupture de ligne.
L'insertion semi-colonale automatique (ASI) dans JavaScript est un mécanisme qui insère automatiquement les semi-colons (ASI) dans la plupart des terminateurs de ligne. Cela signifie que même si vous oubliez de mettre un point-virgule à la fin d'une instruction, JavaScript l'interprétera toujours correctement.
Oui, les fins de ligne peuvent être utilisées pour formater le code JavaScript. Une utilisation appropriée des terminaisons de ligne peut rendre votre code plus lisible et plus facile à entretenir. Il est courant de démarrer une nouvelle ligne pour chaque instruction ou après un bloc de code (comme une fonction ou une boucle).
Les terminaisons de ligne en JavaScript affectent principalement la liabilité et l'organisation du code. Cependant, ils peuvent également avoir un impact sur l'exécution du code en termes d'insertion automatique des demi-colonies (ASI). Si une fin de ligne est placée de manière incorrecte, cela pourrait conduire à des résultats inattendus en raison de l'insertion automatique des demi-colons. Par conséquent, il est important de comprendre et d'utiliser correctement les fins de ligne.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!