No internet connection
  1. Home
  2. Dúvidas Gerais

Javascript variáveis tipo referência e primitivas

Por marcelo jhones @MarceloJhonesDev
    2023-11-05 02:35:25.206Z

    Olá, Pessoal!

    Vim falar um pouco pra vcs sobre um assunto muito importante no javascript que são as variáveis tipo primitivo e referências. No javascript as variáveis são divididas em tipo

    Primitivo:

    • undefined
    • null
    • boolean
    • number
    • string
    • symbol

    Referência:

    • Object

    Certo, mas pq deveríamos saber disso? a resposta está em como manipulamos a memória.
    Exemplo os tipos de variáveis referência tais como os arrays ou objetos em javascript. Quando passamos para um função ou os declaramos estamos passando endereços da memória para fazermos a manipulação e não o valor em si.

    Exemplo:
    function teste(a,b){
    a = 2;
    b = 5;
    }

    function teste2(arrayValores){
    arrayValores[0] = 10;
    arrayValores[1] = 20;
    }

    let a = 150
    let b = 120;
    const arrayValores=[5,7];

    teste(a,b);
    console.log(a = ${a})
    console.log(b = ${b})

    teste2(arrayValores)

    console.log(Array[0] = ${arrayValores[0]})
    console.log(Array[1] = ${arrayValores[1]})

    No exemplo acima podemos observar que a funcao teste2 consegue manipular os valores do array e o resultado é atualizado mesmo fora da função pois por ser uma variável do tipo referencia o javascript entende que acessamos o valores pelo endereco de memória e atualizamos ele. Já na funcao teste os valores a e b são passados para funcao teste e sao atualizados dentro dela mas nada acontece. Pq isso? justamente pq as variáveis de tipo primitiva só "conhecem" cópia de valores. Ou seja, o "a" e "b" , passados para funcao teste não são mais aqueles que declaramos com let mas sim é passada uma cópia de ambos os valores para a funcao teste e lá são manipuladas apenas cópias dos valores originais.

    Por isso, uma das recomendações da MDN é declarar arrays,objetos etc (Ou qualquer variável tipo referência) com const em vez de let pois endereços de memória via de regra não devem mudar.

    Quaisquer dúvidas, estou à disposição.

    • 2 respostas
    1. Júlio César Ramos @JulioRamos
        2023-11-06 13:24:41.783Z

        Bacana demais, vai agregar bastante!

        1. Em resposta aMarceloJhonesDev:
          Grasiele Tinoco @grasieletinoco
            2023-11-06 20:43:39.612Z

            Artigo muito interessante.