definição
Uma corda é zero ou mais caracteres dispostos juntos, colocados em citações únicas ou duplas.
'ABC' "ABC"Citações duplas podem ser usadas dentro de uma única sequência de cotação. Dentro de uma sequência de cotação dupla, cotações únicas podem ser usadas.
'key = "value"' "é uma longa jornada"
Ambos acima são seqüências legais.
Se você deseja usar citações únicas dentro de uma única string de cotação (ou citações duplas dentro de uma sequência de cotação dupla), você deve prefixar a citação única (ou citações duplas) para escapar.
'Ela disse/' olá/'?' // "Ela disse 'Olá'?" "Ela disse/" Olá/"?" // "Ela disse" Olá "?"
Como os valores de atributo do idioma HTML usam cotações duplas, muitos projetos concordam que as seqüências de idiomas JavaScript usam apenas cotações únicas, e este tutorial segue esta convenção. Obviamente, também é perfeito usar apenas citações duplas. É importante manter um estilo e não misturar os dois estilos.
Por padrão, as strings só podem ser escritas em uma linha e, se forem divididas em várias linhas, elas relatarão um erro.
'ABC' // SyntaxError: token inesperado ilegal
O código acima divide uma string em três linhas e o JavaScript relatará um erro.
Se uma sequência longa deve ser dividida em várias linhas, uma barra de barra poderá ser usada no final de cada linha.
var longString = "long /long /long /string"; longstring // "string longa longa" longa "
O código acima mostra que, depois de adicionar uma barra de barra, a string originalmente gravada em uma linha pode ser dividida em várias linhas de escrita. No entanto, ao produzir, o efeito ainda é uma única linha e o efeito é exatamente o mesmo que escrever na mesma linha. Observe que a barra de barriga deve ser seguida por um caractere de nova linha e não deve haver outros caracteres (como espaços), caso contrário, um erro será relatado.
O operador de concatenação (+) pode concatenar várias strings de linha única, dividir a corda longa em várias linhas para gravar e também é uma única linha quando a saída.
var longString = 'long' + 'long' + 'long' + 'string';
Se você deseja produzir strings de várias linhas, há uma solução alternativa para utilizar comentários de várias linhas.
(function () {/*linha 1 line 2line 3*/}). tostring (). split ('/n'). slice (1, -1) .Join ('/n') // "linha 1 // linha 2 // linha 3"No exemplo acima, a sequência de saída são várias linhas.
Escapar
O backslash (/) tem um significado especial em uma string e é usado para representar alguns caracteres especiais, por isso também é chamado de caractere de fuga.
Os caracteres especiais que precisam ser escapados com barragens são principalmente os seguintes:
Os caracteres acima são precedidos por barris, todos representam significados especiais.
console.log ('1/n2') // 1 // 2No código acima, /n significa uma nova linha e é dividida em duas linhas ao produzir.
Existem três usos especiais para barras de barriga.
(1)/HHHH
A barra de barriga é seguida por três números octal (000 a 377), representando um personagem. HHH corresponde ao ponto de código Unicode do caractere correspondente, como /251 representa o símbolo de direitos autorais. Obviamente, esse método pode produzir apenas 256 caracteres.
(2)/xhh
/x é seguido por dois números hexadecimais (00 a FF), representando um personagem. HH corresponde ao ponto de código Unicode do caractere, como /Xa9 representa o símbolo de direitos autorais. Este método pode produzir apenas 256 caracteres.
(3)/uxxxxx
/u é seguido por quatro números hexadecimais (0000 a fffff), representando um personagem. HHHHH corresponde ao ponto de código Unicode do caractere, como /U00A9 representa o símbolo de direitos autorais.
Abaixo estão exemplos desses três caracteres especiais escritos em detalhes.
'/251' // "©" '/xa9' // "©" '/u00a9' // "©" '/172' === 'z' // true '/x7a' === 'z' // true '/u007a' == 'z' // verdadeiro
Se uma barra de barriga for usada antes de um caractere não especial, a barra de barriga será omitida.
'/a' // "a"
No código acima, A é um caractere normal e não há significado especial para adicionar uma barra de barra antes, e a barra de barragem será automaticamente omitida.
Se a barra de barriga precisar ser incluída no conteúdo normal da string, outra barra de barriga precisará ser adicionada antes da barra de barragem para escapar.
"Prev // Next" // "Prev/ Next"
Cordas e matrizes
Uma string pode ser tratada como uma matriz de caracteres; portanto, o operador de suporte quadrado da matriz pode ser usado para retornar caracteres em uma determinada posição (o número da posição começa em 0).
var s = 'hello'; s [0] // "h" s [1] // "e" s [4] // "o" // use o operador de suporte quadrado 'hello' [1] // "e"
Se o número entre colchetes exceder o comprimento da corda, ou se o número entre colchetes não for de forma alguma, indefinido será retornado.
'abc' [3] // indefinido
No entanto, isso é tudo sobre a semelhança entre cordas e matrizes. De fato, é impossível alterar um único caractere em uma string.
var s = 'hello'; excluir s [0]; s // "hello" s [1] = 'a'; s // "hello" s [5] = '!'; s // "hello"
O código acima indica que caracteres individuais dentro de uma string não podem ser alterados ou adicionados ou excluídos, e essas operações falharão silenciosamente.
A razão pela qual as strings são semelhantes às matrizes de caracteres é realmente porque, ao executar operação de suporte quadrado em strings, a string será automaticamente convertida em um objeto String.
atributo de comprimento
O atributo de comprimento retorna o comprimento da string, que não pode ser alterado.
var s = 'hello'; S.Length // 5S.Length = 3; S.Length // 5S.Length = 7; S.Length // 5
O código acima indica que o atributo de comprimento da string não pode ser alterado, mas não haverá erros.
Conjunto de caracteres
O JavaScript usa conjuntos de caracteres Unicode, o que significa que, no JavaScript, todos os caracteres são representados pelo Unicode.
O JavaScript não apenas usa o Unicode para armazenar caracteres internamente, mas o Unicode também pode ser usado diretamente no programa. Todos os caracteres podem ser gravados na forma de "/uxxxx", onde xxxx representa a codificação unicode do caractere. Por exemplo, /U00A9 representa um símbolo de direitos autorais.
var s = '/u00a9'; s // "©"
Cada caractere é armazenado no formato UTF-16 de 16 bits (ou seja, 2 bytes) dentro do JavaScript. Ou seja, o comprimento do caractere da unidade do JavaScript é fixado em comprimento de 16 bits, ou seja, 2 bytes.
No entanto, o UTF-16 tem dois comprimentos: para caracteres entre U+0000 e U+FFFF, o comprimento é de 16 bits (ou seja, 2 bytes); Para caracteres entre U+10000 e U+10ffff, o comprimento é de 32 bits (ou seja, 4 bytes) e os dois primeiros bytes estão entre 0xd800 e 0xdbff, e os dois últimos bytes estão entre 0xdc00 e 0xdfff. Por exemplo, o caractere correspondente de U+1d306 é ? e é escrito como UTF-16, que é 0xd834 0xdf06. O navegador reconhecerá corretamente esses quatro bytes como um caractere, mas o comprimento do personagem dentro do JavaScript é sempre fixado em 16 bits, e esses quatro bytes serão tratados como dois caracteres.
var s = '/ud834/udf06'; s // "?" s.length // 2 /^.$/. Teste (s) // Falses.charat (0) // "" S.Charat (1) // "" S.Charcodeat (0) // 55348s.
O código acima mostra que, para os caracteres entre U+10000 e U+10FFFF, o JavaScript é sempre tratado como dois caracteres (o atributo de comprimento do caractere é 2). A expressão regular usada para corresponder a um único caractere falhará (o JavaScript acredita que mais de um caractere está aqui), o método Charat não pode retornar um único caractere e o método do charcodeat retorna o valor decimal correspondente a cada byte.
Portanto, ao lidar com isso, isso deve ser levado em consideração. Para 4 caracteres Bytes Unicode, assumindo que C é o número unicode do personagem, H é os dois primeiros bytes e L são os dois últimos bytes, a relação de conversão entre eles é a seguinte.
// converte caracteres maiores que u + ffffff de unicode para utf -16h = math.floor ((c - 0x10000)/ 0x400) + 0xd800l = (c - 0x10000) % 0x400 + 0xdc00 // conversor maior que u + fffff de utf -16 para unicodec + 0x10000
A expressão regular a seguir pode reconhecer todos os caracteres UTF-16.
([/0-/ud7ff/ue000-/ufff] | [/ud800-/udbff] [/udc00-/udff])
Como o mecanismo JavaScript (estritamente falando, a especificação ES5) não pode reconhecer automaticamente caracteres Unicode do plano auxiliar (número maior que 0xffff), todas as funções de processamento de string produzirão resultados incorretos ao encontrar esses caracteres. Se você deseja concluir operações relacionadas a strings, deve determinar se os caracteres se enquadram no intervalo de 0xd800 a 0xdfff.
Abaixo está uma função que pode manipular corretamente a travessia de string.
função getSymbols (string) {var comprimento = string.length; var index = -1; var output = []; personagem var; var charcode; while (++ índice <length) {caractere = string.charat (index); charcode = caractere.charcodeat (0); if (charcode> = 0xd800 && charcode <= 0xdbff) {output.push (caractere+string.charat (++ index)); } else {output.push (caractere); }} retornar saída;} var símbolos = getSymbols ('?'); símbolos.foreach (function (símbolo) {// ...});Outras operações de string, como a substituição (String.prototype.replace), intercepto de substring (String.prototype.substring, string.prototype.slice) devem ser tratadas de maneira semelhante.
Base64 Transcoding
Base64 é um método de codificação que pode converter qualquer caractere em caracteres imprimíveis. Esse método de codificação é usado principalmente para não criptografar, mas para evitar caracteres especiais e simplificar o processamento do programa.
O JavaScript fornece nativamente dois métodos relacionados à base64.
var string = 'Hello World!'; BTOA (String) // "SGVSBG8GV29YBGQH" ATOB ('SGVSBG8GV29YBGQH') // "Hello World!" Esses dois métodos não são adequados para caracteres não-ASCII e relatarão um erro. BTOA ('Hello') // Domexception não capturado: A sequência a ser codificada contém caracteres fora da faixa Latin1. Para converter caracteres não-ASCII para a codificação Base64, um link de transcodificação deve ser inserido no meio e, em seguida, esses dois métodos são usados. função b64Encode (str) {return btoa (codeuricomponent (str));} função b64decode (str) {return decodeuricomponent (atob (str));} b64Encode ('hello') // "Juu0JuJeJuewJuU1JUE1JUJE" B64Decode ('JUU0JUJEJUEWJUU1JUE1JUJE') // "Hello"