Definition
Eine Zeichenfolge ist mit Null oder mehr Zeichen zusammen angeordnet und in einzelnen oder doppelten Zitaten platziert.
'ABC' "ABC"Doppelzitate können in einer einzelnen Zitatzeichenfolge verwendet werden. In einer Doppelzitat -Zeichenfolge können einzelne Zitate verwendet werden.
'key = "value"' "Es ist eine lange Reise"
Beide oben sind rechtliche Saiten.
Wenn Sie einzelne Zitate in einer einzelnen Zitatzeichenfolge (oder doppelte Zitate in einer Doppelzitat -Zeichenfolge) verwenden möchten, müssen Sie das einzelne Zitat (oder doppelte Zitate) innen vorfixieren, um zu entkommen.
"Hat sie/" Hallo/"gesagt," hat sie "Hallo" gesagt? "
Da die Attributwerte der HTML -Sprachdoppelzitate doppelte Zitate verwenden, sind sich viele Projekte einig, dass JavaScript -Sprachzeichenfolgen nur einzelne Zitate verwenden, und dieses Tutorial folgt dieser Konvention. Natürlich ist es auch perfekt, nur Doppelzitate zu verwenden. Es ist wichtig, sich an einen Stil zu halten und die beiden Stile nicht zu mischen.
Standardmäßig können Zeichenfolgen nur in einer Zeile geschrieben werden, und wenn sie in mehrere Zeilen unterteilt sind, melden sie einen Fehler.
'ABC' // syntaxError: unerwartetes Token illegal
Der obige Code unterteilt eine Zeichenfolge in drei Zeilen, und JavaScript meldet einen Fehler.
Wenn eine lange Zeichenfolge in mehrere Zeilen unterteilt werden muss, kann am Ende jeder Zeile ein Backslash verwendet werden.
var longstring = "long /long /long /string"; longstring // "Long Long String" "
Der obige Code zeigt, dass nach dem Hinzufügen eines Backslashs die ursprünglich in einer Zeile geschriebene Zeichenfolge in mehrere Schreibzeilen unterteilt werden kann. Beim Ausgang ist der Effekt jedoch immer noch eine einzelne Linie und der Effekt ist genau das gleiche wie das Schreiben auf derselben Zeile. Beachten Sie, dass der Backslash von einem Newline -Charakter folgen muss und es keine anderen Zeichen (z. B. Leerzeichen) geben darf, andernfalls wird ein Fehler gemeldet.
Der Verkettungsoperator (+) kann mehrere Einzelzeilenketten verkettet, die lange Zeichenfolge in mehrere Zeilen aufteilen, um sie zu schreiben, und es handelt sich auch um eine einzelne Zeile bei Ausgabe.
var longstring = 'long' + 'long' + 'long' + 'String';
Wenn Sie Multi-Line-Zeichenfolgen ausgeben möchten, gibt es eine Problemumgehung, um multi-line-Kommentare zu verwenden.
(function () {/*Zeile 1line 2line 3*/}). toString (). split ('/n'). Slice (1, -1) .Join ('/n') // "Zeile 1 // Zeile 2 // Zeile 3"Im obigen Beispiel besteht die Ausgabebestunde mehrere Zeilen.
Flucht
Backslash (/) hat eine besondere Bedeutung in einer Zeichenfolge und wird verwendet, um einige Sonderzeichen darzustellen. Daher wird es auch als Escape -Zeichen bezeichnet.
Sonderzeichen, die mit Backslashes entkommen werden müssen, sind hauptsächlich wie folgt:
Den oben genannten Zeichen gehen Rückstand vor, die alle besondere Bedeutungen darstellen.
console.log ('1/n2') // 1 // 2Im obigen Code bedeutet /n eine neue Zeile und sie wird beim Ausgabe in zwei Zeilen unterteilt.
Es gibt drei besondere Verwendungen für Backslashes.
(1)/HHHH
Auf den Backslash folgen drei Oktalzahlen (000 bis 377), die einen Charakter darstellen. HHH entspricht dem Unicode -Codepunkt des entsprechenden Zeichens, wie z. B. /251 das Urheberrechtsymbol darstellt. Offensichtlich kann diese Methode nur 256 Zeichen ausgeben.
(2)/xhh
/X folgt zwei hexadezimale Zahlen (00 bis FF), die einen Charakter darstellen. HH entspricht dem Unicode -Codepunkt des Zeichens, wie z. B. /xa9 das Urheberrechtsymbol darstellt. Diese Methode kann nur 256 Zeichen ausgeben.
(3)/uxxxxx
/U folgt von vier hexadezimalen Zahlen (0000 bis fffff), die einen Charakter darstellen. HHHHH entspricht dem Unicode -Codepunkt des Zeichens, wie z. B. /u00a9 das Urheberrechtsymbol darstellt.
Im Folgenden finden Sie Beispiele dieser drei im Detail geschriebenen Sonderzeichen.
'/251' // "©" '/xa9' // "©" '/u00a9' // "©" '/172' ==== 'Z' // true '/x7a' === 'Z' // true '/u007a' === 'Z' // true
Wenn vor einem nicht speziellen Charakter ein Backslash verwendet wird, wird der Backslash weggelassen.
'/a' // "a"
Im obigen Code ist A ein normales Zeichen, und es gibt keine besondere Bedeutung, um vor ihm einen Backslash hinzuzufügen, und der Backslash wird automatisch weggelassen.
Wenn der Backslash in den normalen Inhalt der Zeichenfolge aufgenommen werden muss, muss ein weiterer Backslash vor dem Backslash hinzugefügt werden, um sich selbst zu entkommen.
"Prev // Weiter" // "prev/ Weiter"
Saiten und Arrays
Eine Zeichenfolge kann als Zeichenarray behandelt werden, sodass der quadratische Halterungsbetreiber des Arrays verwendet werden kann, um Zeichen an einer bestimmten Position zurückzugeben (Positionsnummer beginnt bei 0).
var
Wenn die Zahl in quadratischen Klammern die Länge der Saite überschreitet oder wenn die Zahl in quadratischen Klammern überhaupt nicht ist, wird undefiniert zurückgegeben.
'ABC' [3] // undefined'abc '[-1] // undefined'abc' ['x'] // undefiniert
Dies dreht sich jedoch nur um die Ähnlichkeit zwischen Strings und Arrays. Tatsächlich ist es unmöglich, ein einzelnes Zeichen in einer Zeichenfolge zu ändern.
var s = 'hello'; löschen s [0];
Der obige Code zeigt an, dass einzelne Zeichen in einer Zeichenfolge nicht geändert oder hinzugefügt oder gelöscht werden können, und diese Operationen scheitern leise.
Der Grund, warum Zeichenfolgen den Zeichenarrays ähnlich sind, liegt tatsächlich darin, dass die Zeichenfolge bei der Durchführung von Quadratklassenbetrieb auf Saiten automatisch in ein String -Objekt konvertiert wird.
Längenattribut
Das Längenattribut gibt die Länge der Zeichenfolge zurück, die nicht geändert werden kann.
var s = 'hello';
Der obige Code gibt an, dass das Längenattribut der Zeichenfolge nicht geändert werden kann, aber es gibt keine Fehler.
Zeichensatz
JavaScript verwendet Unicode -Zeichensätze, was bedeutet, dass innerhalb von JavaScript alle Zeichen durch Unicode dargestellt werden.
JavaScript verwendet Unicode nicht nur, um Zeichen intern zu speichern, sondern Unicode kann auch direkt im Programm verwendet werden. Alle Zeichen können in Form von "/uxxxx" geschrieben werden, wobei XXXX die Unicode -Codierung des Zeichens darstellt. Zum Beispiel repräsentiert /u00a9 ein Urheberrechtssymbol.
var s = '/u00a9'; s // "©"
Jedes Zeichen wird in 16-Bit (d. H. 2 Bytes) UTF-16-Format im JavaScript gespeichert. Das heißt, die Länge der Einheit des JavaScripts ist auf 16-Bit-Länge festgelegt, dh 2 Bytes.
UTF-16 hat jedoch zwei Längen: Für Zeichen zwischen U+0000 und U+FFFF beträgt die Länge 16 Bit (d. H. 2 Bytes); Für Zeichen zwischen U+10000 und U+10ffff beträgt die Länge 32 Bit (d. H. 4 Bytes), und die ersten beiden Bytes liegen zwischen 0xD800 und 0xDBFF, und die letzten beiden Bytes liegen zwischen 0xDC00 und 0xDFFF. Zum Beispiel ist das entsprechende Zeichen von U+1D306 ? und ist als UTF-16 geschrieben, was 0xD834 0xDF06 ist. Der Browser erkennt diese vier Bytes korrekt als ein Zeichen, aber die Charakterlänge in JavaScript wird immer auf 16 Bit befestigt, und diese vier Bytes werden als zwei Zeichen behandelt.
var s = '/ud834/udf06';
Der obige Code zeigt, dass JavaScript für Zeichen zwischen U+10000 und U+10ffff immer als zwei Zeichen behandelt wird (das Längenattribut des Zeichens ist 2). Der reguläre Ausdruck, der für ein einzelnes Zeichen entspricht, schlägt fehl (JavaScript ist der Ansicht, dass mehr als ein Zeichen hier ist), die charat -Methode kann kein einzelnes Zeichen zurückgeben, und die CharCodeat -Methode gibt den Dezimalwert zurück, der jedem Byte entspricht.
Daher muss dies bei diesem Umgang berücksichtigt werden. Für 4 Bytes -Unicode -Zeichen, unter der Annahme, dass C die Unicode -Anzahl des Zeichens ist, ist H die ersten beiden Bytes und L die letzten beiden Bytes, die Konversionsbeziehung zwischen ihnen lautet wie folgt.
// Zeichen, die größer als U + ffffff von unicode in utf -16h = math.floor ((c - 0x10000)/ 0x400) + 0xd800L = (c - 0x10000) % 0x400 + 0xdc00 // Konvertieren von Zeichen größer als U + Fffffh von UTF -16 bis UNICDC = (H - 0xd800) konvertieren. 0x10000
Der folgende reguläre Ausdruck kann alle UTF-16-Zeichen erkennen.
([/0-/ud7ff/ue000-/ufff] | [/ud800-/udbff] [/udc00-/udff]))
Da die JavaScript -Engine (streng genommen die ES5 -Spezifikation) Unicode -Zeichen der Hilfsebene (Nummer größer als 0xffff) nicht automatisch erkennen kann, führen alle String -Verarbeitungsfunktionen bei der Begegnung mit solchen Zeichen zu falschen Ergebnissen. Wenn Sie die operativen operativen String abschließen möchten, müssen Sie feststellen, ob die Zeichen in den Bereich von 0xD800 bis 0xDFFF fallen.
Im Folgenden finden Sie eine Funktion, die den String -Traversal korrekt verarbeiten kann.
Funktion Getymbols (String) {var length = String.Length; var index = -1; var output = []; var charakter; var charcode; while (++ Index <Länge) {Zeichen = string.charat (index); charCode = Zeichen.CharCodeat (0); if (charCode> = 0xd800 && charCode <= 0xdbff) {output.push (Zeichen+string.charat (++ Index)); } else {output.push (Zeichen); }} return output;} var symbole = getymbols ('?'); symbols.foreach (Funktion (symbol) {// ...});Andere String -Operationen wie Ersatz (String.Prototype.Replace), Intercept -Substring (String.Prototype.substring, String.Prototype.slice) müssen ähnlich behandelt werden.
Base64 Transcodierung
Base64 ist eine Codierungsmethode, mit der jedes Zeichen in druckbare Zeichen umwandeln kann. Diese Codierungsmethode wird hauptsächlich zum Verschlingen verwendet, sondern um Sonderzeichen zu vermeiden und die Verarbeitung des Programms zu vereinfachen.
JavaScript liefert nativ zwei Base64-bezogene Methoden.
var String = 'Hallo Welt!'; Diese beiden Methoden sind nicht für Nicht-ASCII-Zeichen geeignet und melden einen Fehler. BTOA ('Hello') // Uncortn Domexception: Die zu codierte Zeichenfolge enthält Zeichen außerhalb des lateinischen1 -Bereichs. Um Nicht-ASCII-Zeichen in Basis64-Codierung umzuwandeln, muss eine Transcodierungsverbindung in die Mitte eingefügt werden, und dann werden diese beiden Methoden verwendet. Funktion B64CODE (STR) {return btoa (Encodeuricomponent (str));} Funktion B64Decode (STR) {return decodeuricomponent (ATOB (str));} B64Codode ('Hello') // "Juu0jujejuewjuu1jue1juje" b64decode ('juu0jujejuewjuu1jue1juje') // "Hallo"