definición
Una cadena es cero o más caracteres dispuestos juntos, colocados en citas simples o dobles.
'ABC' "ABC"Se pueden usar citas dobles dentro de una sola cadena de cotización. Dentro de una cadena de cotización doble, se pueden usar citas individuales.
'Key = "Value"' "Es un largo viaje"
Ambas arriba son cadenas legales.
Si desea usar citas individuales dentro de una sola cadena de cotización (o citas dobles dentro de una cadena de cotización doble), debe prefijo la cotización única (o cotizaciones dobles) dentro para escapar.
'¿Ella dice/' Hola/'?' // "¿Dice 'Hola'?" "¿Dice/" Hola/"?" // "¿Dice" Hola "?"
Dado que los valores de atributo del lenguaje HTML usan cotizaciones dobles, muchos proyectos están de acuerdo en que las cadenas de lenguaje JavaScript solo usan cotizaciones individuales, y este tutorial sigue esta convención. Por supuesto, también es perfecto para usar citas dobles solamente. Es importante apegarse a un estilo y no mezclar los dos estilos.
Por defecto, las cadenas solo se pueden escribir en una línea, y si se dividen en múltiples líneas, informarán un error.
'ABC' // SyntaxError: token inesperado ilegal
El código anterior divide una cadena en tres líneas, y JavaScript informará un error.
Si se debe dividir una cadena larga en múltiples líneas, se puede usar una barra de retroceso al final de cada línea.
var longstring = "long /long /long /string"; longstring // "cadena larga larga"
El código anterior muestra que después de agregar una barra de invertir, la cadena originalmente escrita en una línea se puede dividir en múltiples líneas de escritura. Sin embargo, al emitir, el efecto sigue siendo una sola línea, y el efecto es exactamente el mismo que escribir en la misma línea. Tenga en cuenta que la barra inalcadora debe ser seguida por un carácter nuevo, y no debe haber otros caracteres (como espacios), de lo contrario se informará un error.
El operador de concatenación (+) puede concatenar múltiples cadenas de una sola línea, dividir la cadena larga en múltiples líneas para escribir, y también es una sola línea cuando se emite.
var longstring = 'long' + 'largo' + 'largo' + 'cadena';
Si desea obtener cadenas de múltiples líneas, hay una solución para utilizar comentarios de varias líneas.
(function () {/*línea 1line 2line 3*/}). ToString (). Split ('/n'). Slice (1, -1) .Join ('/n') // "Línea 1 // Línea 2 // Línea 3"En el ejemplo anterior, la cadena de salida son múltiples líneas.
Escapar
Back -stain (/) tiene un significado especial en una cadena y se usa para representar algunos caracteres especiales, por lo que también se llama carácter de escape.
Los caracteres especiales que necesitan ser escapados con barras de retroceso son principalmente los siguientes:
Los personajes anteriores están precedidos por barras de fondo, que representan significados especiales.
console.log ('1/n2') // 1 // 2En el código anterior, /n significa una nueva línea, y se divide en dos líneas al emitir.
Hay tres usos especiales para barras trastas.
(1)/HHHH
La barra invertida es seguida por tres números octales (000 a 377), que representa un personaje. HHH corresponde al punto de código Unicode del carácter correspondiente, como /251 representa el símbolo de derechos de autor. Obviamente, este método solo puede generar 256 caracteres.
(2)/xhh
/X es seguido por dos números hexadecimales (00 a FF), representando un carácter. HH corresponde al punto de código Unicode del carácter, como /xa9 representa el símbolo de derechos de autor. Este método solo puede generar 256 caracteres.
(3)/uxxxxx
/U es seguido por cuatro números hexadecimales (0000 a FFFFF), representando un personaje. HHHHH corresponde al punto de código Unicode del carácter, como /u00A9 representa el símbolo de copyright.
A continuación hay ejemplos de estos tres caracteres especiales escritos en detalle.
'/251' // "©" '/xa9' // "©" '/u00a9' // "©" '/172' === 'z' // true '/x7a' === 'Z' // true '/u007a' === 'z' // true '
Si se usa una barra inalcadora antes de un carácter no especial, se omite la barra inalcadora.
'/a' // "A"
En el código anterior, A es un carácter normal, y no hay un significado especial para agregar una barra inalcanzada antes que él, y la barra inalcadora se omitirá automáticamente.
Si la barra inalcadora debe incluirse en el contenido normal de la cadena, entonces se debe agregar otra barra invertida antes de la barra inalcadora para escapar.
"Prev // Next" // "anterior/ Next"
Hilos y matrices
Una cadena puede tratarse como una matriz de caracteres, por lo que el operador de soporte cuadrado de la matriz se puede usar para devolver caracteres en una determinada posición (el número de posición comienza en 0).
var s = 'hola'; s [0] // "h" s [1] // "e" s [4] // "o" // Use el operador de soporte cuadrado 'Hello' [1] // "E"
Si el número de soportes cuadrados excede la longitud de la cadena, o si el número en los soportes cuadrados no está en absoluto, se devuelve indefinido.
'ABC' [3] // Undefined'Abc '[-1] // Undefined'abc' ['x'] // Undefined
Sin embargo, se trata de la similitud entre cadenas y matrices. De hecho, es imposible cambiar un solo carácter en una cadena.
var s = 'hola'; eliminar s [0]; s // "hola" s [1] = 'a'; s // "hello" s [5] = '!'; s // "hola"
El código anterior indica que los caracteres individuales dentro de una cadena no se pueden cambiar, agregar o eliminar, y estas operaciones fallarán en silencio.
La razón por la cual las cadenas son similares a las matrices de caracteres se debe a que al realizar operación de soporte cuadrado en cadenas, la cadena se convertirá automáticamente en un objeto de cadena.
atributo de longitud
El atributo de longitud devuelve la longitud de la cadena, que no se puede cambiar.
var s = 'hola'; s.length // 5s.length = 3; s.length // 5s.length = 7; s.length // 5
El código anterior indica que el atributo de longitud de la cadena no se puede cambiar, pero no habrá errores.
Conjunto de personajes
JavaScript utiliza conjuntos de caracteres Unicode, lo que significa que dentro de JavaScript, todos los caracteres están representados por Unicode.
JavaScript no solo usa Unicode para almacenar personajes internamente, sino que también se puede usar unicode directamente en el programa. Todos los caracteres se pueden escribir en forma de "/uxxxx", donde xxxx representa la codificación unicode del personaje. Por ejemplo, /U00A9 representa un símbolo de derechos de autor.
var s = '/u00a9'; s // "©"
Cada personaje se almacena en formato UTF-16 de 16 bits (es decir, 2 bytes) dentro de JavaScript. Es decir, la longitud del carácter de la unidad de JavaScript se fija a la longitud de 16 bits, es decir, 2 bytes.
Sin embargo, UTF-16 tiene dos longitudes: para caracteres entre U+0000 y U+FFFF, la longitud es de 16 bits (es decir, 2 bytes); Para los caracteres entre U+10000 y U+10ffff, la longitud es de 32 bits (es decir, 4 bytes), y los dos primeros bytes están entre 0xd800 y 0xdbff, y los dos últimos bytes están entre 0xdc00 y 0xdfff. Por ejemplo, el carácter correspondiente de U+1D306 es ?, y se escribe como UTF-16, que es 0xd834 0xdf06. El navegador reconocerá correctamente estos cuatro bytes como un solo carácter, pero la longitud del personaje dentro de JavaScript siempre se fija a 16 bits, y estos cuatro bytes serán tratados como dos caracteres.
var s = '/UD834/UDF06'; S // "?" S.Length // 2 /^.$/. Test (s) // falseses.charat (0) // "" S.Charat (1) // "" S.Charcodeat (0) // 55348s.charcodeat (1) // 57094
El código anterior muestra que para los caracteres entre U+10000 y U+10ffff, JavaScript siempre se trata como dos caracteres (el atributo de longitud del personaje es 2). La expresión regular utilizada para coincidir con un solo carácter fallará (JavaScript cree que más de un carácter está aquí), el método Charat no puede devolver un solo carácter, y el método de charcodeat devuelve el valor decimal correspondiente a cada byte.
Por lo tanto, cuando se trata de esto, esto debe tenerse en cuenta. Para 4 bytes de caracteres unicode, suponiendo que C es el número unicode del personaje, H es los dos primeros bytes, y L es los dos últimos bytes, la relación de conversión entre ellos es la siguiente.
// Convertir caracteres más grandes que u + ffffff de unicode a utf -16h = math.floor ((c - 0x10000)/ 0x400) + 0xd800l = (c - 0x10000) % 0x400 + 0xdc00 // Convertir caracteres más grandes que u + fffff de utf -1 -16 a unicodec = (h - 0xd800) * 0x400 + l - 0xdc + 0x10000
La siguiente expresión regular puede reconocer todos los caracteres UTF-16.
([/0-/UD7FF/UE000-/UFFF] | [/UD800-/UDBFF] [/UDC00-/UDFF]))
Debido a que el motor JavaScript (estrictamente hablando, la especificación ES5) no puede reconocer automáticamente los caracteres Unicode del plano auxiliar (número mayor que 0xffff), todas las funciones de procesamiento de cadenas producirán resultados incorrectos al encontrar dichos caracteres. Si desea completar las operaciones relacionadas con la cadena, debe determinar si los caracteres caen dentro del rango de 0xd800 a 0xdfff.
A continuación se muestra una función que puede manejar correctamente el recorrido de cadena.
función getSymbols (string) {var longitud = string.length; Var index = -1; varilla var = []; carácter var; VAR CHARCODE; while (++ index <longitud) {caracteres = string.charat (index); charcode = caracteres.charcodeat (0); if (charcode> = 0xd800 && charcode <= 0xdbff) {output.push (caracteres+string.charat (++ index)); } else {output.push (carácter); }} salida de retorno;} VAR Symbols = GetSymbols ('?'); Symbols.ForEach (function (Symbol) {// ...});Otras operaciones de cadena como Reemplazo (String.Prototype.replace), Intercept Substring (String.Prototype.substring, String.Prototype.slice) debe manejarse de manera similar.
Base64 Transcoding
Base64 es un método de codificación que puede convertir cualquier carácter en caracteres imprimibles. Este método de codificación se usa principalmente para no cifrar, sino para evitar caracteres especiales y simplificar el procesamiento del programa.
JavaScript proporciona de forma nativa dos métodos relacionados con Base64.
var string = 'Hello World!'; btoa (string) // "sgvsbg8gv29ybgqh" atob ('sgvsbg8gv29ybgqh') // "¡Hola mundo!" Estos dos métodos no son adecuados para caracteres no ASCII e informarán un error. BTOA ('Hello') // Domexception no capturado: la cadena a codificar contiene caracteres fuera de la gama Latin1. Para convertir caracteres no ASCII en codificación Base64, se debe insertar un enlace de transcodificación en el medio, y luego se utilizan estos dos métodos. función b64Encode (str) {return bTOA (codeDeRiCoMponent (str));} function b64Decode (str) {return decodeuricOponent (atob (str));} b64Encode ('hello') // "JUU0JUJEJUEWJUU1JUE1JUJE" B64DECODE ('JUU0JUJEJUEWJUU1JUE1JUJE') // "Hola"