JavaScript Slice: Como Usar em Strings e Arrays
O método JavaScript slice é um dos recursos mais úteis para manipular textos e coleções sem alterar o valor original. Ele está disponível em strings e arrays, permitindo extrair uma seção definida por índices de início e fim. Dominar String.slice e Array.slice ajuda a escrever códigos mais previsíveis, seguros e fáceis de manter, seja para recortar uma URL, obter os últimos itens de uma lista, criar cópias superficiais ou processar dados recebidos de uma API. Neste guia, você entenderá a sintaxe, os índices negativos, os principais casos de uso, as diferenças em relação a métodos parecidos e as boas práticas para aplicar slice em projetos JavaScript modernos.
Entenda o funcionamento do JavaScript slice
Em JavaScript, slice() retorna uma nova string ou um novo array contendo uma parte do valor original. A estrutura básica é valor.slice(inicio, fim). O parâmetro inicio indica a posição a partir da qual a extração começa, enquanto fim define a posição final que não será incluída no resultado. Portanto, o intervalo é iniciado de forma inclusiva e encerrado de forma exclusiva.
Em uma string como "programação", o índice zero corresponde à letra p. Assim, "programação".slice(0, 4) produz "prog". O método lê os caracteres nas posições 0, 1, 2 e 3, mas não inclui a posição 4. Esse comportamento é importante para evitar erros de limite e combina com a convenção usada por vários métodos e estruturas da linguagem.
Se o segundo argumento for omitido, o JavaScript slice extrai tudo desde o índice inicial até o final. Por exemplo, "desenvolvimento".slice(6) retorna "vimento". Quando ambos os argumentos são omitidos em um array, array.slice() cria uma cópia superficial do array. Isso significa que o novo array é independente na estrutura externa, embora objetos armazenados internamente continuem apontando para as mesmas referências.
A documentação da MDN sobre String.prototype.slice() detalha esse comportamento para textos, enquanto a referência de Array.prototype.slice() explica o uso aplicado a listas. Consultar essas fontes é recomendável quando houver dúvida sobre compatibilidade, parâmetros e casos extremos.
String.slice para extrair parte da string
O uso de String.slice é especialmente comum quando uma aplicação precisa formatar ou interpretar textos. Considere uma data no padrão 2026-07-20. A expressão data.slice(0, 4) retorna o ano, e data.slice(5, 7) retorna o mês. Como o fim do intervalo não entra no resultado, essa técnica oferece controle preciso sobre cada trecho.
Outro cenário frequente é remover prefixos. Se uma URL começa com https://, é possível utilizar url.slice(8) para obter o restante. Contudo, em sistemas reais, é mais adequado validar primeiro se o prefixo realmente existe, usando startsWith(). Dessa forma, o código não remove caracteres indevidos de valores que tenham outro formato.
Os índices negativos tornam o método ainda mais prático. Um índice negativo é contado a partir do final: -1 representa o último caractere, -2 o penúltimo e assim sucessivamente. Por exemplo, "relatorio.pdf".slice(-4) retorna ".pdf". Já "relatorio.pdf".slice(0, -4) obtém "relatorio". Essa abordagem é útil para separar extensões de arquivos, mascarar dados e extrair sufixos.
Vale observar que strings são imutáveis em JavaScript. Logo, slice() nunca modifica o texto inicial; ele sempre devolve uma nova string. Essa característica reduz efeitos colaterais e favorece funções previsíveis. Ainda assim, deve-se guardar o retorno em uma variável ou usá-lo diretamente, pois chamar o método isoladamente não muda o conteúdo original.
Array.slice e cópias de coleções
Quando aplicado a arrays, Array.slice seleciona elementos segundo a mesma regra de início inclusivo e fim exclusivo. Dado o array const linguagens = ["JavaScript", "Python", "Java", "Go", "Rust"];, a expressão linguagens.slice(1, 4) retorna ["Python", "Java", "Go"]. Os dados em linguagens permanecem intactos.
Essa preservação é a diferença decisiva entre slice() e métodos mutáveis. Em interfaces com React, Vue ou outras bibliotecas, evitar alterações diretas no estado é uma prática essencial. Para adicionar, remover ou reorganizar itens sem modificar um array original, uma cópia feita por slice() pode servir como base para a nova versão. Por exemplo, const copia = itens.slice(); cria um novo array externo antes de outras operações.
Entretanto, essa cópia é superficial. Se itens contiver objetos, como [{ nome: "Ana" }], o objeto dentro de copia será a mesma referência presente na lista original. Alterar copia[0].nome também será percebido por quem lê itens[0].nome. Para cópias profundas, é preciso usar uma estratégia compatível com o tipo de dado, como structuredClone(), quando disponível e adequado.
O método também pode converter coleções semelhantes a arrays em arrays reais, especialmente em códigos legados, por meio de Array.prototype.slice.call(valor). Hoje, em muitos contextos, Array.from() ou o operador spread são alternativas mais legíveis. Ainda assim, compreender esse padrão é útil ao manter aplicações antigas ou ao analisar bibliotecas tradicionais.
Casos práticos para aplicar slice no código
- Recortar identificadores: use
codigo.slice(0, 8)para obter uma parte inicial de um token, desde que isso não seja usado como mecanismo de segurança. - Ocultar dados sensíveis: uma visualização de cartão pode combinar
"**** **** **** "comnumero.slice(-4), após validar o formato do dado. - Paginar resultados locais:
registros.slice(inicio, inicio + tamanhoPagina)seleciona os itens de uma página de uma lista já carregada. - Remover cabeçalho ou rodapé:
linhas.slice(1, -1)descarta o primeiro e o último elemento de um array. - Separar nome e extensão:
arquivo.slice(0, arquivo.lastIndexOf("."))pode recuperar o nome-base quando existe extensão. - Duplicar uma lista antes de ordenar:
const ordenados = produtos.slice().sort(comparador);evita quesort()modifique o array original. - Truncar textos para interfaces:
descricao.slice(0, limite)é útil para prévias, mas convém considerar palavras completas e acessibilidade.
Em todos esses casos, a validação de entrada continua necessária. Um valor null ou undefined não possui o método slice(), produzindo erro. Quando o dado puder ser ausente, uma abordagem explícita é verificar seu tipo antes da operação. Para textos, typeof valor === "string" evita suposições frágeis; para listas, Array.isArray(valor) é a verificação mais apropriada.
Slice, splice, substring e substr: comparação essencial

| Método | Aplicação | Modifica o original? | Índices negativos | Observação principal |
|---|---|---|---|---|
slice() | Strings e arrays | Não | Sim | Extrai intervalo com fim exclusivo. |
splice() | Arrays | Sim | Sim, no índice inicial | Remove, adiciona ou substitui elementos. |
substring() | Strings | Não | Não | Converte negativos para zero e pode trocar argumentos. |
substr() | Strings | Não | Parcialmente | Legado; seu uso não é recomendado em código novo. |
A confusão entre slice() e splice() é comum devido à semelhança dos nomes. A distinção é simples, mas crítica: slice() consulta e retorna uma parte; splice() modifica o próprio array. Se o objetivo é preservar a coleção inicial, prefira JavaScript slice. Se o objetivo é remover ou inserir elementos na coleção existente, splice() pode ser apropriado, desde que a mutação seja intencional.
Em strings, substring() também recorta conteúdo, porém seu tratamento de argumentos é diferente. Em geral, slice() é preferido por aceitar índices negativos de maneira intuitiva e por manter coerência com arrays. A especificação oficial ECMAScript, publicada pela TC39, é a referência normativa para o comportamento da linguagem e dos seus métodos nativos.
Dúvidas frequentes sobre JavaScript slice
O que o método slice faz em JavaScript?
O método slice() retorna uma nova string ou um novo array com uma parte do valor original. Ele recebe um índice inicial e, opcionalmente, um índice final exclusivo. O dado de origem não é alterado, o que torna o método adequado para operações sem efeitos colaterais.
O índice final de slice é incluído no resultado?
Não. O primeiro índice é incluído, mas o segundo é excluído. Por isso, "JavaScript".slice(0, 4) retorna "Java". Entender essa regra evita erros ao extrair caracteres, montar intervalos e implementar paginação.
Como usar slice com índices negativos?
Índices negativos contam a partir do fim do valor. Em "arquivo.txt".slice(-3), o resultado é "txt". Para retirar os três últimos caracteres, use "arquivo.txt".slice(0, -3). Esse padrão é eficiente para trabalhar com sufixos e finais de listas.
Array.slice cria uma cópia profunda?
Não. Array.slice() cria uma cópia superficial. O array externo é novo, mas objetos, arrays internos e outras referências armazenadas nele continuam compartilhados. Para duplicar estruturas aninhadas, avalie structuredClone() ou uma técnica específica para os dados da aplicação.
Qual é a diferença entre slice e splice?
slice() não modifica o array original e retorna uma seção dele. Já splice() altera o array em que é chamado, removendo, inserindo ou trocando elementos. A escolha depende de a mutação ser desejada ou não, mas projetos modernos geralmente favorecem transformações imutáveis.
Conclusão: use slice com precisão e segurança
O domínio de JavaScript slice simplifica tarefas rotineiras de tratamento de strings e arrays. Sua sintaxe concisa, o suporte a índices negativos e a ausência de mutação do valor original fazem do método uma escolha confiável para extrair dados, gerar cópias superficiais e preparar informações para a interface. Ao lembrar que o fim é exclusivo e que cópias de arrays não são profundas, você evita os erros mais frequentes. Para um código mais claro, escolha slice() quando precisar recortar sem modificar; reserve métodos mutáveis, como splice(), para situações em que a alteração direta seja realmente necessária.
Referências e materiais para aprofundamento
- MDN Web Docs — String.prototype.slice().
- MDN Web Docs — Array.prototype.slice().
- ECMAScript Language Specification — TC39.
- MDN Web Docs — Array.prototype.splice().
Isenção de responsabilidade
Este conteúdo tem finalidade educacional e informativa. Os exemplos de JavaScript slice foram elaborados para demonstrar conceitos gerais e podem exigir adaptações conforme a versão do JavaScript, o ambiente de execução, o framework e os requisitos de segurança de cada projeto. Antes de implementar rotinas em produção, teste o comportamento com dados reais, valide entradas externas e consulte a documentação oficial aplicável.
Compartilhar este post
Pesquisador, empresário e escritor focado em educação, orientação sobre negócios. Escreve sobre diversos assuntos com abordagem prática e acessível para o público brasileiro.