[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Guide/Data_structures [Back]  [Original]

Estrutura de dados do Javascript - JavaScript | MDN

Esta pgina foi traduzida do ingls pela comunidade. Saiba mais e junte-se comunidade MDN Web Docs.

View in English Always switch to English

Estrutura de dados do Javascript

Todas as linguagens de programao tm estruturas de dados embutidas, mas geralmente diferem de uma linguagem para outra. Este artigo tenta listar as estruturas de dados internas disponveis em JavaScript e quais propriedades elas possuem. Estes podem ser usados para construir outras estruturas de dados. Sempre que possvel, so feitas comparaes com outras lnguas.

In this article

Tipagem dinmica e fraca

JavaScript uma linguagem dinmica com tipos dinmicos. As variveis em JavaScript no esto diretamente associadas a nenhum tipo de valor especfico, e qualquer varivel pode receber (e reatribuir) valores de todos os tipos:

js
let foo = 42; // foo agora  um nmero
foo = "bar"; // foo agora  uma string
foo = true; // foo agora  um booleano

JavaScript tambm uma linguagem de tipagem fraca, o que significa que permite a converso implcita de tipo quando uma operao envolve tipos incompatveis, em vez de gerar erros de tipo.

js
const foo = 42; //foo  um nmero
const result = foo + "1"; // JavaScript coage foo para uma string, ento ela pode ser concatenada com o outro operando
console.log(resultado); // 421

Coeres implcitas so muito convenientes, mas podem ser uma arma em potencial se os desenvolvedores no pretendem fazer a converso ou pretendem converter na outra direo (por exemplo, string para nmero em vez de nmero para string). Para symbols e BigInts, o JavaScript desativou intencionalmente certas converses de tipo implcito.

Tipos em JavaScript

O conjunto de tipos na linguagem JavaScript consiste em primitive values e objects.

Valores primitivos

Todos os tipos, exceto objetos, definem valores imutveis (ou seja, valores que no podem ser alterados). Por exemplo, Strings so imutveis. Referimo-nos a valores desses tipos como "valores primitivos".

Tipo Boolean

Boolean representa uma entidade lgica e pode ter dois valores: true e false. Consulte Boolean e Boolean para obter mais detalhes.

Tipo Null

O tipo Null tem exatamente um valor: null. Consulte null e Null para obter mais detalhes.

Tipo Undefined

Uma varivel que no recebeu um valor tem o valor undefined. Consulte undefined e Undefined para mais detalhes.

Tipos numricos

ECMAScript tem dois tipos numricos integrados: Number e BigInt junto com o valor relacionado NaN.

Tipo Number

O tipo Number um valor IEEE 754 de formato binrio de 64 bits de preciso dupla. capaz de armazenar nmeros de ponto flutuante positivos entre 2^-1074 (Number.MIN_VALUE) e 2^1024 (Number.MAX_VALUE), bem como nmeros de ponto flutuante negativos entre -(2^-1074) e -(2^1024), mas s pode armazenar com segurana inteiros no intervalo -(2^53 1) (Number.MIN_SAFE_INTEGER) para 2^53 1 (Number.MAX_SAFE_INTEGER).

Nota: Voc pode verificar se um nmero est dentro do intervalo de inteiros seguros usando Number.isSafeInteger(). Fora do intervalo de Number.MIN_SAFE_INTEGER a Number.MAX_SAFE_INTEGER, o JavaScript no pode mais representar inteiros com segurana; eles sero representados por uma aproximao de ponto flutuante de preciso dupla.

Valores fora do intervalo (2^-1074 a 2^1024) so convertidos automaticamente:

+Infinity e -Infinity se comportam de forma semelhante ao infinito matemtico, mas com algumas pequenas diferenas; veja Number.POSITIVE_INFINITY e Number.NEGATIVE_INFINITY para detalhes.

O tipo Number tem apenas um inteiro com mltiplas representaes: 0 representado como -0 e +0 (onde 0 um alias para +0). Na prtica, quase no h diferena entre as diferentes representaes; por exemplo, +0 === -0 true. No entanto, voc pode perceber isso quando divide por zero:

js
console.log(42 / +0); // Infinity
console.log(42 / -0); // -Infinity

Embora um nmero geralmente represente apenas seu valor, o JavaScript fornece operadores bitwise.

Nota: Embora os operadores bit a bit podem ser usados para representar vrios valores booleanos em um nico nmero usando mascaramento de bits, isso geralmente considerada uma m prtica. JavaScript oferece outros meios para representar um conjunto de booleanos (como uma matriz de booleanos ou um objeto com valores booleanos atribudos a propriedades nomeadas). O mascaramento de bits tambm tende a tornar o cdigo mais difcil de ler, entender e manter.

Pode ser necessrio usar essas tcnicas em ambientes muito restritos, como ao tentar lidar com as limitaes do armazenamento local ou em casos extremos (como quando cada bit na rede conta). Esta tcnica s deve ser considerada quando for a ltima medida que pode ser tomada para otimizar o tamanho.

Tipo BigInt

O tipo BigInt uma primitiva numrica em JavaScript que pode representar inteiros com preciso arbitrria. Com BigInts, voc pode armazenar e operar com segurana em grandes nmeros inteiros, mesmo alm do limite de nmeros inteiros seguros.

Um BigInt criado anexando n ao final de um inteiro ou chamando o construtor.

Voc pode obter o maior valor seguro que pode ser incrementado com Numbers usando a constante Number.MAX_SAFE_INTEGER. Com a introduo do BigInts, voc pode operar com nmeros alm do Number.MAX_SAFE_INTEGER.

Este exemplo demonstra, onde incrementar o Number.MAX_SAFE_INTEGER retorna o resultado esperado:

js
// BigInt
const x = BigInt(Number.MAX_SAFE_INTEGER); // 9007199254740991n
x + 1n === x + 2n; // false porque 9007199254740992n e 9007199254740993n so desiguais

// Number
Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2; // true porque ambos so 9007199254740992

Voc pode usar os operadores +, *, -, ** e % com BigInts assim como com Numbers. Um BigInt no estritamente igual a um Number, mas vagamente assim.

Um BigInt se comporta como um Number nos casos em que convertido em booleano: if, ||, &&, Boolean, !.

BigInts no podem ser operados de forma intercambivel com Numbers. Em vez disso, um TypeError ser lanado.

NaN

NaN ("Not a Number") normalmente encontrado quando o resultado de uma operao aritmtica no pode ser expresso como um nmero. tambm o nico valor em JavaScript que no igual a si mesmo.

Tipo String

O tipo String do JavaScript usado para representar dados textuais. um conjunto de "elementos" de valores inteiros sem sinal de 16 bits. Cada elemento na String ocupa uma posio na String. O primeiro elemento est no ndice 0, o prximo no ndice 1 e assim por diante. O comprimento de uma String o nmero de elementos nela.

As strings JavaScript so imutveis. Isso significa que uma vez que uma string criada, no possvel modific-la.

No entanto, ainda possvel criar outra string com base em uma operao na string original. Por exemplo:

  • Uma substring do original escolhendo letras individuais ou usando substring().
  • Uma concatenao de duas strings usando o operador de concatenao (+) ou concat().

Cuidado com a tipagem do seu cdigo!

Pode ser tentador usar strings para representar dados complexos. Fazer isso traz benefcios a curto prazo:

  • fcil construir strings complexas com concatenao.
  • Strings so fceis de depurar (o que voc v impresso sempre o que est na string).
  • Strings so o denominador comum de muitas APIs (campos de entrada, valores de armazenamento local , XMLHttpRequest respostas ao usar responseText, etc.) e pode ser tentador trabalhar apenas com strings.

Com convenes, possvel representar qualquer estrutura de dados em uma string. Isso no faz com que seja uma boa ideia. Por exemplo, com um separador, pode-se emular uma lista (enquanto um array JavaScript seria mais adequado). Infelizmente, quando o separador usado em um dos elementos da "lista", a lista quebrada. Um caractere de escape pode ser escolhido, etc. Tudo isso requer convenes e cria uma carga de manuteno desnecessria.

Use strings para dados textuais. Ao representar dados complexos, parse strings e use a abstrao apropriada.

Tipo Symbol

Um Symbol um valor primitivo nico e imutvel e pode ser usado como a chave de uma propriedade Object (veja abaixo). Em algumas linguagens de programao, os smbolos so chamados de "tomos".

Para mais detalhes veja a pgina de referncia Symbol.

Objetos

Na cincia da computao, um objeto um valor na memria que possivelmente referenciado por um identificador.

Propriedades

Em JavaScript, os objetos podem ser vistos como uma coleo de propriedades. Com a sintaxe literal de objeto, um conjunto limitado de propriedades inicializado; ento as propriedades podem ser adicionadas e removidas. Os valores de propriedade podem ser valores de qualquer tipo, incluindo outros objetos, o que permite construir estruturas de dados complexas. As propriedades so identificadas usando valores key. Um valor key um String value ou um Symbol value.

Existem dois tipos de propriedades de objeto: A data property e a accessor property. Cada propriedade tem attributes correspondentes. Cada atributo acessado internamente pelo mecanismo JavaScript, mas voc pode defini-los por meio de Object.defineProperty() ou l-los por meio de Object.getOwnPropertyDescriptor(). Voc pode ler mais sobre as vrias nuances na pgina Object.defineProperty().

Propriedade de dados

As propriedades de dados associam uma chave a um valor. Pode ser descrito pelos seguintes atributos:

value

O valor recuperado por um acesso get da propriedade. Pode ser qualquer valor JavaScript.

gravvel

Um valor booleano que indica se a propriedade pode ser alterada com uma atribuio.

enumervel

Um valor booleano que indica se a propriedade pode ser enumerada por um loop for...in. Consulte tambm Enumerabilidade e propriedade de propriedades para saber como a enumerabilidade interage com outras funes e sintaxes.

configurvel

Um valor booleano que indica se a propriedade pode ser excluda, pode ser alterada para uma propriedade acessora e pode ter seus atributos alterados.

Propriedade do acessor

Associa uma chave com uma das duas funes de acesso (get e set) para recuperar ou armazenar um valor.

Nota: importante reconhecer que o acessor property no o acessor method. Podemos fornecer acessores semelhantes a classes a um objeto JavaScript usando uma funo como valor mas isso no torna o objeto uma classe.

Uma propriedade do acessor tem os seguintes atributos:

get

Uma funo chamada com uma lista de argumentos vazia para recuperar o valor da propriedade sempre que um acesso de obteno ao valor for executado. Consulte tambm getters. Pode ser indefinido.

definir

Uma funo chamada com um argumento que contm o valor atribudo. Executado sempre que se tenta alterar uma propriedade especificada. Consulte tambm setters. Pode ser indefinido.

enumervel

Um valor booleano que indica se a propriedade pode ser enumerada por um loop for...in. Consulte tambm Enumerabilidade e propriedade de propriedades para saber como a enumerabilidade interage com outras funes e sintaxes.

configurvel

Um valor booleano que indica se a propriedade pode ser excluda, pode ser alterada para uma propriedade de dados e pode ter seus atributos alterados.

Objetos e funes "normais"

Um objeto JavaScript um mapeamento entre keys e values. Chaves so strings (ou smbolos), e values pode ser qualquer coisa. Isso torna os objetos um ajuste natural para hashmaps.

Funes so objetos regulares com a capacidade adicional de serem callable.

Datas

Ao representar datas, a melhor opo usar o utilitrio Date integrado em JavaScript.

Colees indexadas: Arrays e Arrays tipados

Arrays so objetos regulares para os quais existe uma relao especfica entre propriedades de chave inteira e a propriedade length.

Alm disso, arrays herdam de Array.prototype, que fornece a eles um punhado de mtodos convenientes para manipular arrays. Por exemplo, indexOf() (pesquisando um valor no array) ou [push()](/en- US/docs/Web/JavaScript/Reference/Global_Objects/Array/push) (adicionando um elemento matriz) e assim por diante. Isso torna os Arrays um candidato perfeito para representar listas ou conjuntos.

Typed Arrays apresentam uma viso semelhante a um array de um buffer de dados binrios subjacente e oferecem muitos mtodos que tm semntica semelhante aos equivalentes de array. "Typed array" um termo abrangente para uma variedade de estruturas de dados, incluindo Int8Array, Float32Array, etc. Verifique a pgina typed array para obter mais informaes .

Colees chaveadas: Maps, Sets, WeakMaps, WeakSets

Essas estruturas de dados usam referncias de objetos como chaves. Set e WeakSet representante reenviam um conjunto de objetos, enquanto Map e WeakMap associam um valor a um objeto.

A diferena entre Maps e WeakMaps que no primeiro, as chaves de objeto podem ser enumeradas. Isso permite otimizaes de coleta de lixo no ltimo caso.

Voc pode implementar Maps e Sets voc mesmo. No entanto, como os objetos no podem ser comparados (no sentido de < "menor que", por exemplo), nem o mecanismo expe sua funo de hash para objetos, o desempenho da pesquisa seria necessariamente linear. Implementaes nativas deles (incluindo WeakMaps) podem ter um desempenho de pesquisa que aproximadamente logartmico para tempo constante.

Normalmente, para vincular dados a um n DOM, pode-se definir propriedades diretamente no objeto ou usar atributos data-*. Isso tem a desvantagem de que os dados esto disponveis para qualquer script em execuo no mesmo contexto. Maps e WeakMaps facilitam privately vincular dados a um objeto.

Dados estruturados: JSON

JSON (JavaScript Object Notation) um formato leve de intercmbio de dados, derivado do JavaScript, mas usado por muitas linguagens de programao. JSON cria estruturas de dados universais.

Consulte JSON e JSON para obter mais detalhes.

Mais objetos na biblioteca padro

JavaScript tem uma biblioteca padro de objetos internos.

Por favor, d uma olhada na referncia para saber mais sobre objetos.

Determinando tipos usando o operador typeof

O operador typeof pode ajud-lo a encontrar o tipo de sua varivel.

Leia a pgina de referncia para obter mais detalhes e casos extremos.

Veja tambm


Web Proxy Viewer  |  New URL  |  Original Page