ECMAScript 2016/2017 Dicas - Array.prototype.includes
Tags: ecmascript, includes, es2016, dicas
Published: 2021-01-07 20:36:32

![includes](https://dev-to-uploads.s3.amazonaws.com/i/caahx1ydo3i62x9ylkj4.png)
Olá pessoal,

Este é o primeiro de uma série de vários artigos que pretendo escrever sobre as novas implementações do ECMAScript 2016/2017.

O foco principal é aperfeiçoar meus conhecimentos em Javascript e ao mesmo tempo compartilhar todo o conhecimento adquirido com vocês.

Pretendo ser bem didático quanto aos exemplos como forma de ajudar principalmente os que estão iniciando na linguagem.

Bem, chega de papo e vamos ao que interessa!

> A partir de agora chamarei o ECMAScript 2016/2017 de ES16/17 para facilitar nossas vidas.

O ES16/17 nos trouxe um novo método chamado includes. 

> Não confundir com o [método includes](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/String/includes) do objeto global String.

O método includes está disponível no objeto global Array. Caso você não saiba do que estou falando pode ver mais sobre o objeto global Array [aqui](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array).

## A assinatura do método

Primeiramente vamos dar uma olhada na assinatura do método que é a seguinte:

`Array.prototype.includes(value : any) : boolean`

Como podemos observar, este método aceita qualquer tipo (value: any) como valor e nos retorna um booleano como resposta.

Vejamos um exemplo:

{% codepen https://codepen.io/angelorubin/pen/ExgRLRM default-tab=js %}

No primeiro exemplo podemos notar que o método includes recebe o valor (3), percorre o array e verifica se encontra o valor dentro do array, caso o método encontre o valor ele nos retorna verdadeiro (true) e caso não encontre nos retorna falso (false).

No segundo exemplo ele recebe um número (4) que não existe no array e como é de se esperar nos retorna falso (false).

Simples e objetivo !

O curioso é que o método includes() é similar a um método que já existe no Javascript, este método é conhecido como indexOf():

{% codepen https://codepen.io/angelorubin/pen/zYKaybX default-tab=js %}

Mas você pode estar se perguntando, se já existe um método que resolve o problema, para que criaram outro?

Na verdade existem pequenas diferenças entre eles e a primeira delas é que o método indexOf() não verifica [NaN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN) (propriedade do objeto global), já o método includes possui esse tipo de verificação.

Vejamos um exemplo:

{% codepen https://codepen.io/angelorubin/pen/MWjqpvo default-tab=js %}

A segunda diferença é que o método includes() não diferencia -0 e +0, pois o Javascript tenta minimizar isto nos dando a impressão que só existe um zero, quando na verdade existem dois zeros (-0 e +0). 

Como não pretendo me aprofundar na explicação deste tópico do (zero negativo) em particular para não deixar o artigo muito extenso, deixo um link para vocês [aqui](https://pt.wikipedia.org/wiki/Zero_negativo) onde explica em detalhes o problema.

Vejamos um exemplo:

{% codepen https://codepen.io/angelorubin/pen/ZEpjpEJ default-tab=js %}

No exemplo acima vemos que o método includes() trata o (-0) e o (+0) como iguais, quando na verdade eles não são.

É isso ai pessoal!

Espero que tenha ficado claro o uso do método includes e que vocês tenham gostado do artigo.

Qualquer dúvida, crítica ou sugestão serão bem vindas.

**Spoiler** : No próximo artigo pretendo falar um pouco sobre uma novidade muito interessante do ES16/17 que são os **operadores de exponenciação**.

Até breve e espero por vocês!