Tradução em progresso.
Esse capítulo introduz como trabalhar com strings e texto em JavaScript.
Strings
O tipo String do JavaScript é usado para representar informações de texto. É um conjunto de "elementos" composto por valores inteiros de 16-bits sem sinal. Cada elemento dentro da String ocupa uma posição dentro dessa String. O primeiro elemento está no índice 0, o próximo no índice 1, e assim sucessivamente. O tamanho de uma String é a quantidade de elementos que ela possui. Você pode criar strings usando strings literais ou objetos String.
Strings literais
Você pode criar strings simples usando aspas simples ou aspas duplas:
'foo' "bar"
Strings mais avançadas podem ser criadas usando sequências com escape:
Sequências hexadecimais com escape
O número depois de \x é interpretado como um número hexadecimal.
'\xA9' // "©"
Sequências unicode com escape
As sequências unicode com escape requerem no mínimo quatro caracteres depois do \u.
'\u00A9' // "©"
Sequências de escape Unicode code point
É novo no ECMAScript 6. Com essas sequências, cada caractere pode ser "escapado" usando números hexadecimais, sendo possível usar Unicode code points de até 0x10FFFF. Usando escapes Unicode simples é frequentemente necessário escrever os surrogate halves separadamente para obter o mesmo resultado.
Veja também String.fromCodePoint() or String.prototype.codePointAt().
'\u{2F804}'
// o mesmo com escapes Unicode simples
'\uD87E\uDC04'
Objetos String
O objeto String é como uma "capa" por volta do tipo primitivo string.
var s = new String("foo"); // Cria um objeto String
console.log(s); // Exibe no console: { '0': 'f', '1': 'o', '2': 'o'}
typeof s; // Retorna 'object'
Você pode chamar qualquer um dos métodos do objeto String em cima de uma string literal—JavaScript automaticamente converte a string literal em um objeto String temporário, chama o método, e então descarta o objeto String temporário. Você pode também usar a propriedade String.length com uma string literal.
Você deve usar strings literais a menos que você realmente precise usar um objeto String, pois objetos String podem ter comportamentos inesperados. Por exemplo:
var s1 = "2 + 2"; // Cria uma string literal
var s2 = new String("2 + 2"); // Creates um objeto String
eval(s1); // Retorna o número 4
eval(s2); // Retorna a string "2 + 2"
Um objeto String possui uma propriedade, length, que indica o número de caracteres na string. Por exemplo, o código a seguir atribui o valor 11 à variável x, pois "Olá, mundo!" possui 11 caracteres:
var minhaString = "Olá, mundo!"; var x = minhaString.length;
Um objeto String possui uma variedade de métodos: por exemplo aqueles que retornam uma variação da própria string, como substring e toUpperCase.
A tabela a seguir lista os métodos de objetos String.
| Método | Descrição |
|---|---|
charAt, charCodeAt, codePointAt |
Retorna o código ou o caractere em uma posição específica na string. |
indexOf, lastIndexOf |
Retorna a posição de uma substring específica na string ou a última posição da substring específica, respectivamente. |
startsWith, endsWith, includes |
Retorna se uma string começa, termina ou contém uma outra string específica. |
concat |
Combina o texto de duas strings e retorna uma nova string. |
fromCharCode, fromCodePoint |
Cria uma string a partir de uma sequência específica de valores Unicode. Esse é um método da classe String, não de uma instância do tipo String. |
split |
Separa um objeto String em um array de strings, separando a string em substrings. |
slice |
Extrai uma seção de uma string e retorna uma nova string. |
substring, substr |
Retorna um subconjunto específico de uma string, definindo os índices inicial e final, ou definindo um índice e um tamanho. |
match, replace, search |
Trabalha com expressões regulares. |
toLowerCase, toUpperCase |
Retorna a string com todos caracteres em minúsculo, ou maiúsculo, respectivamente. |
normalize |
Retorna a Forma Normalizada Unicode (Unicode Normalization Form) da string que chama o método. |
repeat |
Retorna uma string contendo os elementos do objeto repetidos pela quantidade de vezes dada. |
trim |
Retira espaços em branco no começo e no final da string. |
Template strings com várias linhas
Template strings são strings literais que permitem expressões no seu conteúdo. Você pode usar os recursos de strings com multiplas linhas e interpolações de string com as template strings.
Template strings são declaradas com o acento grave (``) ao invés de aspas simples ou aspas duplas. Essas strings podem conter place holders. Os place holders são indicados pelo cifrão e com chaves ( ${expressao} ).
Várias linhas (Multi-lines)
Qualquer caractere de nova linha ( '\n' ) inserido na string também faz parte das template strings. Usando strings normais, você teria que usar a sintaxe a seguir para conseguir uma string de várias linhas
console.log("linha de texto 1\n\
linha de texto 2");
// "linha de texto 1
// linha de texto 2"
Para obter o mesmo efeito com strings multi-lines, você pode agora escrever:
console.log(`linha de texto 1 linha de texto 2`); // "linha de texto 1 // linha de texto 2"
Expressões inseridas
Para conseguir inserir expressões com strings normais, você teria que usar a seguinte sintaxe:
var a = 5;
var b = 10;
console.log("Quinze é " + (a + b) + " e\nnão " + (2 * a + b) + ".");
// "Quinze é 15 e
// não 20."
Agora, com template strings, você tem a capacidade de usar uma forma mais simples e legível para fazer essas substituições:
var a = 5;
var b = 10;
console.log(`Quinze é ${a + b} e\nnão ${2 * a + b}.`);
// "Quinze é 15 e
// não 20."
Para mais informações, leia sobre Template strings na referência JavaScript.
Internacionalização
O objeto Intl é o namespace para a API de Internacionalização do ECMAScript, que oferece comparação de strings sensíveis à linguagem, formatação de números, e formatação de datas e horas. Os construtores para os objetos Collator, NumberFormat, e DateTimeFormat são propriedades do objeto Intl.
Formatação de data e hora
O objeto DateTimeFormat é útil para a formatação de data e hora. O código a seguir formata uma data em inglês do jeito que é usado nos Estados Unidos. (O resultado é diferente em outro fuso horário).
var msPorDia = 24 * 60 * 60 * 1000; // número de milisegundos em um dia
// July 17, 2014 00:00:00 UTC.
var july172014 = new Date(msPorDia * (44 * 365 + 11 + 197));
var opcoes = { year: "2-digit", month: "2-digit", day: "2-digit",
hour: "2-digit", minute: "2-digit", timeZoneName: "short" };
var americanDateTime = new Intl.DateTimeFormat("en-US", opcoes).format;
console.log(americanDateTime(july172014)); // 07/16/14, 5:00 PM PDT
Formatação de números
O objeto NumberFormat é útil para formatar números, por exemplo unidade monetária.
var precoGasolina = new Intl.NumberFormat("en-US",
{ style: "currency", currency: "USD",
minimumFractionDigits: 3 });
console.log(precoGasolina.format(5.259)); // $5.259
var hanDecimalRMBInChina = new Intl.NumberFormat("zh-CN-u-nu-hanidec",
{ style: "currency", currency: "CNY" });
console.log(hanDecimalRMBInChina.format(1314.25)); // ¥ 一,三一四.二五
Collation
O objeto Collator é usado para comparar e ordenar strings.
Por exemplo, existem atualmente duas ordens diferentes no Alemão: phonebook e dictionary. A ordem de phonebook enfatiza o som, e é como se "ä", "ö", e assim por diante, fossem expandidos para "ae", "oe", e assim sucessivamente, para definir a ordem.
var nomes = ["Hochberg", "Hönigswald", "Holzman"];
var phonebookAlemao = new Intl.Collator("de-DE-u-co-phonebk");
// como se ordenasse ["Hochberg", "Hoenigswald", "Holzman"]:
console.log(names.sort(phonebookAlemao.compare).join(", "));
// imprime "Hochberg, Hönigswald, Holzman"
Algumas palavras do alemão são conjugadas com tremas extras, mas no dicionário essas palavras são ordenadas ignorando os tremas (exceto quando ordenando palavras que tem apenas o trema como diferença: schon antes de schön).
var dicionarioAlemao = new Intl.Collator("de-DE-u-co-dict");
// como se ordenasse ["Hochberg", "Honigswald", "Holzman"]:
console.log(names.sort(dicionarioAlemao.compare).join(", "));
// imprime "Hochberg, Holzman, Hönigswald"
Para mais informação sobre a API Intl, veja também Introducing the JavaScript Internationalization API (em inglês).