JavaScript: Variáveis e constantes

Em JavaScript podemos declarar variáveis de duas formas atualmente, com let ou var, sendo let a forma recomendada. Aprenda a diferença entre essas formas neste artigo.

Em JavaScript podemos declarar variáveis de duas formas atualmente, com let ou var, sendo let a forma recomendada. let permite declarar variáveis que existem apenas no escopo no qual desejamos utilizá-las. Esse comportamento é diferente quando utilizamos var, que cria variáveis globais e que podem ser acessadas em qualquer local no arquivo ou função onde foram declaradas.

Visão geral

É importante saber diferenciar entre o comportamento de let e var, do contrário erros difíceis de serem rastreados podem acontecer. Supondo que desejamos incluir em um script o cálculo da média de preços de alguns produtos, dada uma determinada condição. Considere que ao fazer isso o programador nomeie e variável media dentro do if como total por engano, assim como no código abaixo.

var precos = [ 1200.8, 345.8, 2543.98 ]; var total = // Total dos valores produtos no array precos ... var incluirMedia = true; ... if(incluirMedia) { var total = total/precos.length; // Continuo a lógica }

Uma vez que declaramos ambas as variáveis com var, tendo elas o mesmo identificador, total, a lógica de execução do script estará errada porque para o interpretador ambas são as mesma variável. Dessa forma, o valor atribuído à variável total utilizada dentro do if sobrescreverá aquele dado a ela em sua declaração, algumas linhas acima.

Ao substituirmos a palavra reservada var por let dentro do if, total será considerada uma nova variável, impedindo que o valor atribuído à variável total declarada acima seja sobrescrito. Nesse novo cenário teremos um erro de execução, protegendo o programa de falhar silenciosamente:

let total = total/precos.length; ^ ReferenceError: total is not defined

Sintaxe

let | var [ identificador ] [ = valor | expressão ]

Na prática

Exemplo 1

Variáveis podem armazenar diferentes tipos de valores como textos ou números:

let tipoNumber = 12 let tipoString1 = 'Texto entre aspas simples' let tipoString2 = "Texto entre aspas duplas" let tipoNull = null let tipoUndefined = undefined let tipoObject = { nome : 'José da Silva', idade : 18 } let tipoBoolean = true || false

Exemplo 2

É possível atribuir a uma variável o resultado de uma expressão:

let totalBruto = 5000 let desconto = 0.1 let totalLiquido = totalBruto - (totalBruto * desconto)

No código acima, uma vez que utilizamos parênteses, primeiro será calculada a multiplicação e, em seguida, a subtração. Após, a variável totalLiquido será iniciada com o resultado da operação matemática.

Exemplo 3

As variáveis declaradas com let dentro de blocos if ou for não podem ser acessadas de fora destes blocos.

let admin = true if(admin) { let menu = [ "home", "contato", "settings" ] } if(menu.includes("settings")) { // Alguma logica }

Caso isso aconteça o script será encerrado com o erro abaixo:

if(menu.includes("settings")) { ^ ReferenceError: menu is not defined

Exemplo 4

Quando usamos var para declarar a variável usada como índice em um for a mesma permanece acessível, mesmo após o encerramento deste laço de repetição.

for(var i = 0; i < precos.length; i++) { total += precos[i] } media = total / precos.length console.log(i) // 3

Para corrigir esse código devemos utilizar o let no for para evitar que variáveis criadas para a sua execução sejam acessíveis fora de seu escopo:

for(let i = 0; i < precos.length; i++) { total += precos[i] } media = total / precos.length console.log(i) // ReferenceError: i is not defined

Exemplo 5

O JavaScript move declarações para o topo do código por padrão. Isso permite, em alguns casos, usar uma variável antes dela ser declarada. Esse comportamento padrão da linguagem é chamado Hoisting.

Contudo, quando declaramos uma variável com let ela não é movida para o topo do código:

function cpfIsValido (value) { return /^\d\.\d\.\d\-\d$/.test(value) } console.log(cpfIsValido(cpfComVar)) console.log(cpfIsValido(cpfComLet)) var cpfComVar = '999.999.999-99' let cpfComLet = '999.999.999-99'

Dado que a variável cpfComLet é utilizada na linha 6 antes da sua declaração na linha 9 o script será encerrado com um erro:

console.log(cpfIsValido(cpfComLet)) // 'value' was used before it was defined. ^ ReferenceError: cpfComLet is not defined

Constantes

O valor de uma constante não pode ser modificado. No JavaScript declaramos constantes com a palavra reservada const. Uma constante se comporta em relação ao escopo onde foi declarada da mesma forma que uma variável declarada com let.

Sintaxe

const [ identificador ] = [ valor | expressão ]

Na prática

Exemplo 1

Podemos atribuir a uma constante o resultado de uma expressão:

const peso = 80.5 const altura = 1.80 const imc = peso / (altura * altura) console.log(imc)

É comum usarmos constantes para evitar que um valor seja sobrescrito ao longo do código.

Exemplo 2

Constantes são muito utilizadas para criar funções em conjunto da sintaxe das funções em flecha:

const desconto = (preco, aliquota) => preco * aliquota desconto(560.56, 0.08)

Criamos aqui uma função chamada desconto que retorna o cálculo do preço vezes a alíquota informada como parâmetro.

Exemplo 3

Uma constante declarada sem ser iniciada com um valor gera um erro de sintaxe:

const aliquota console.log(aliquota)
(function (exports, require, module, __filename, __dirname) { const aliquota ^^^^^^^^ SyntaxError: Missing initializer in const declaration

Exemplo 4

Assim como quando utilizamos let, uma constante está limitada ao escopo em que foi declarada:

const quantidade = 10 if (quantidade >= 3) { const quantidade = 20 console.log(quantidade) // 20 } console.log(quantidade) // 10

Dentro do if a constante quantidade é tratada como uma nova declaração e o valor atribuído a ela poderá ser acessado apenas dentro desse bloco.

Exemplo 5

Um objeto declarado como constante não pode ser sobrescrito:

const produto = { id : 1, nome : 'Grampo', preco : 34.7 } produto = null

Sendo este o caso, o script será encerrado com um erro:

produto = null ^ TypeError: Assignment to constant variable.

Contudo, os atributos de um objeto declarado como constante podem ser sobrescritos.

const produto = { id : 1, nome : 'Grampo', preco : 34.7 } produto.preco = null

Esse comportamento pode não ser desejado. Nesse caso podemos utilizar a função Object.freeze() para evitar que os atributos de um objeto sejam reescritos:

const produto = { id : 1, nome : 'Grampo', preco : 34.7 } const produtoFreeze = Object.freeze(produto) produtoFreeze.preco = null console.log(produtoFreeze.preco) // 34.7

Embora o código acima não chegue a falhar o valor do atributo preco em produtoFreeze permanecerá o mesmo, após a linha 6.

undefined

Uma variável, constante ou função é undefined quando ela ainda não foi declarada. Quando uma variável é utilizada sem que tenha sido declarada o script é encerrado com um erro:

let desconto = 0.1 preco = preco * desconto

Nesses casos o script será encerrado com um erro:

preco = preco * desconto ^ ReferenceError: preco is not defined

Caso tenhamos declarado uma variável ou constante sem atribuir a ela um valor o script será encerrado com um erro:

var preco let desconto console.log(preco) // undefined console.log(desconto) // undefined

Compatibilidade

Engine Versão Minima
Node.JS ( V8) 6.4.0
Safari ( WebKit) 11.1
Chrome ( V8) 68
Microsoft Edge ( ChakraCore) 17
Firefox ( Gecko) 61

Nota: O Opera utiliza atualmente grande parte do código do Chrome como base para o seu próprio desenvolvimento e por isso ele não é mencionado nesta listagem.

Artigos relacionados