Como usar var, let o const en javascript

Si aprendiste a programar en JavaScript hace mucho tiempo y no te has actualizado con la versión ES6 o simplemente estas aprendiendo JS, quizá tengas alguna confusión de como usar Let, Const o el antiguo Var. Pero no te preocupes, en este articulo voy a explicar en que casos debes usar cada uno de ellos.

Lo primero que debes saber es que las 3 formas sirven para declarar variables, Var se usaba antes de la versión ES6 de JavaScript y puedes seguirla usando por compatibilidad con programas antiguos, pero no es recomendable, en su lugar deberías de usar solo Let y Const.

¿En que casos se usa Let en JavaScript?

Let se usa para declarar variables que pueden ser modificadas o re asignadas en cualquier momento, básicamente se usa cuando no necesitas proteger el valor de esta variable contra modificaciones accidentales.

//Podemos cambiar la version en cualquier momento
//lo cual en algunos casos podria ser algo NO deseado
let version = '1.2.0';

version = '1.2.1'; 

console.log(version);

¿En que casos se usa Const en JavaScript?

Const se usa para declarar variables en las que se le asigna un valor inicial y no se le puede asignar otro valor, bajo ninguna circunstancia, a estas se conocen como constantes.  Cualquier intento de asignar un valor a una variable declarada usando Const, va a generar un error.

//La version no puede ser cambiada
const version = '1.2.0';

La excepción: Objetos mutables

Esta es la parte que me confundía acerca de Const, ya sabemos que estas generan variables que no pueden ser modificadas, y esto es cierto si hablamos de tipos de datos primitivos, pero si se trata tipos de datos Object, entonces hay una excepción. No vamos a poder asignar otro objeto a esta variable, pero si podemos modificar el objeto, a esto se le conoce como mutar el objeto. Veamos uno ejemplo:

const datos = { nombre: 'Luis Cruz' } ; //Esto es un objeto

alert( datos.nombre);

//No podemos asignar otro objeto, pero si modificar el objeto
datos.nombre = 'Luis Esteban';

alert( datos.nombre);