DEV Community

Gabriel Cheda
Gabriel Cheda

Posted on

Tipos Javasript

Javascript Types

Meu primeiro post aqui e gostaria de começar explicando algo bem básico, os tipos primitivos e os tipos referência. O conceito serve para qualquer linguagem, mas aqui quis forcar em Javascript.

Primitive Types

Os Primitive Types são aqueles que já "vem com a linguagem", o básico do básico e que usamos diariamente.

Abaixo seguem alguns exemplos, ou seja, existem outros além desses:

typeof("Tipos Javascript") output: string
typeof(0) output: number
typeof(null) output: object
typeof(undefined) output: undefined
typeof(true) output: boolean
Enter fullscreen mode Exit fullscreen mode

Quando usamos tipos primitivos estamos passando o valor "cru" daquela variável e não a variável em si.

Por exemplo:

var tipoPrimitivoNumber = 5

function alterarNumero(tipoPrimitivoNumber) {
    console.log("tipoPrimitivoNumber - Antes", tipoPrimitivoNumber)
    //output: tipoPrimitivoNumber - Antes 5

    tipoPrimitivoNumber = tipoPrimitivoNumber + 5

    console.log("tipoPrimitivoNumber - Depois", tipoPrimitivoNumber)
    //output: tipoPrimitivoNumber - Depois 10
}

alterarNumero(tipoPrimitivoNumber)
console.log(tipoPrimitivoNumber)
//output: 5
Enter fullscreen mode Exit fullscreen mode

Quando fazemos a chamada a função alterarNumero, passamos como parâmetro o tipoPrimitivoNumber que tem valor 5. Dentro desta função logamos o valor antes da somatória (5) e após a somatória (10), mas no final após rodarmos a função o programa loga para a mesma variável o numero 5!

Por que quando logamos a variável após executar a função o seu valor continua o mesmo?!

É simples, quando trabalhamos com tipos primitivos, estamos trabalhando com o VALOR daquela variável e não com a variável em si.

Então, quando passamos para a função alterarNumero um parâmetro do tipo primitivo, o programa substitui o valor do parâmetro da função pelo valor da variável e não pela variável em si.

Seria a mesma coisa que fazer desta forma e esperar que o resultado final mudasse:

alterarNumero(5)
Enter fullscreen mode Exit fullscreen mode

A diferença desta forma, para a chamada com a variável é que o programa substitui a variável quando a função é chamada e aqui estamos passando diretamente o valor.

Caso ainda não tenha entendido, leia até o final que com a explicação dos Reference Types vai ficar mais claro.

Reference Types

Os Reference Types são os objetos, ou object, com exceção do tipo primitivo null que quando utilizamos o typeof(null) nos devolve que é um object, mas, na verdade isso foi um bug introduzido no começo do Javascript que não foi corrigido até hoje.

Acredito que você já tenha ouvido falar que uma variável é um espacinho salvo na memória para um dado. Certo? Caso não tenha ouvido, agora você já sabe.

O que diferencia os dois tipos é que os Reference Types quando são utilizados, o valor deles é passado por referência a esse espacinho salvo em memória, ou seja, o que estamos utilizando é a variável em si e não o seu valor "cru".

Exemplo:

let objetoA = { objeto1: 2 }

function alterarValor(objB) {
    objB.objeto1 = 4; output: 4
}

alterarValor(objetoA);
console.log(objetoA) output: 4
Enter fullscreen mode Exit fullscreen mode

Neste caso, quando passamos o parâmetro objetoA para a função somarValor não estamos passando o seu valor e sim o objeto salvo lá na memória do computador então toda alteração que for feita neste parâmetro afeta diretamente a raiz.

Termino por aqui esse post e peço que qualquer dúvida/erro/sugestão me informem para que eu ajuste!

Abs,
GC.

Bônus1:

undefined x null

undefined significa que nenhum valor foi atribuído aquela variável e o null uma ausência de valor intencional.

let inicializandoVariavel = null;

if(inicializandoVariavelComNomeErrado) {}
// Uncaught ReferenceError: inicializandoVariavelComNomeErrado is not defined (undefined)
Enter fullscreen mode Exit fullscreen mode

Bônus2:

Neste trecho de código utilizamos na função o parâmetro com nome objB intencionalmente, para indicar que não importa o nome que você da ao parâmetro da sua função, pois o valor que irá valer é sempre o que for passado na invocação.

let objetoA = { objeto1: 2 }

function alterarValor(objB) {
    objB.objeto1 = 4; output: 4
}

alterarValor(objetoA);
console.log(objetoA) output: 4
Enter fullscreen mode Exit fullscreen mode

Chamamos a função somarValor(objetoA) passando o objetoA como parâmetro e o programa automaticamente substitui o parâmetro objB pelo objetoA e apenas dentro do escopo desta função o objetoA se chamará objB como um apelido para aquela variável, válido apenas dentro daquela função.

Top comments (1)

Collapse
 
ddsilva07 profile image
ddsilva07

Prático e objetivo!! Mto bom os exemplos do artigo!!