JavaScript Best Practices

JavaScript Best Practices

Contenido original de W3Schools


Evite las variables globales como: new, = y eval().


Evite las variables globales

Minimize el uso de variables globales.

Esto incluye todos los tipos de datos, objetos y funciones.

Las variables y funciones globales se pueden sobrescribir con otros scripts.

Utilice variables locales en su lugar y aprenda a utilizar closures.


Declarar siempre variables locales

Todas las variables utilizadas en una función deben declararse como variables locales.

Las variables locales deben declararse con la palabra clave var, let o const; de lo contrario, se convertirán en variables globales.

El modo estricto no permite variables no declaradas.


Declaraciones al inicio

Es una buena práctica de codificación colocar todas las declaraciones al principio de cada script o función.

Conseguirás:

  • Código más limpio

  • Proporciona un lugar único para buscar variables locales

  • Facilita la prevención de variables globales no deseadas (implícitas)

  • Reduce la posibilidad de nuevas declaraciones no deseadas

// Declara variables al inicio
let firstName, lastName, price, discount, fullPrice;

// Usa despues
firstName = "John";
lastName = "Doe";

price = 19.90;
discount = 0.10;

fullPrice = price - discount;

Esto también se aplica a las variables de bucle:

for (let i = 0; i < 5; i++) {

Inicializar variables

Es una buena práctica de codificación inicializar las variables cuando las declaras.

Conseguirás:

  • Dar código más limpio

  • Proporcionar un único lugar para inicializar variables.

  • Evitar valores indefinidos

// Declara e inicializa las variables
let firstName = "";
let lastName = "";
let price = 0;
let discount = 0;
let fullPrice = 0,
const myArray = [];
const myObject = {};s

La inicialización de variables proporciona una idea del uso previsto (y del tipo de datos previsto).


Declarar objetos con const

Declarar objetos con const evitará cualquier cambio accidental de tipo de dato:

Ejemplo:

let car = {type:"Fiat", model:"500", color:"white"};
car = "Fiat";      // Cambia el objeto a cadena (string)
const car = {type:"Fiat", model:"500", color:"white"};
car = "Fiat";      // No es posible el cambio de dato

Declarar matrices con const

Declarar matrices con const evitará cualquier cambio accidental de tipo de dato:

Ejemplo:

let cars = ["Saab", "Volvo", "BMW"];
cars = 3;    // Cambia la matriz a numero (number)
const cars = ["Saab", "Volvo", "BMW"];
cars = 3;    // No es posible el cambio

No utilices new Object()

  • Utilice "" en lugar de new String()

  • Utilice 0 en lugar de new Number()

  • Utilice false en lugar denew Boolean()

  • Utilice {} en lugar de new Object()

  • Utilice [] en lugar de new Array()

  • Utilice /()/ en lugar de new RegExp()

  • Utilice function (){} en lugar de new Function()

Ejemplo:

let x1 = "";             // nueva cadena primitiva
let x2 = 0;              // nueva numero primitivo
let x3 = false;          // nueva booleano primitivo
const x4 = {};           // nuevo objeto
const x5 = [];           // nuevo objeto de matriz
const x6 = /()/;         // nuevo objeto de expresión regular
const x7 = function(){}; // nuevo objeto de función

Ver ejemplo


Cuidado con las conversiones automáticas de tipo de dato

JavaScript está escrito libremente.

Una variable puede contener todos los tipos de datos.

Una variable puede cambiar su tipo de datos:

Ejemplo:

let x = "Hello";     // typeof de x es una cadena
x = 5;               // cambia el typeof de x a numero

Tenga en cuenta que los números pueden convertirse accidentalmente en cadenas o NaN (Not a Number).

Al realizar operaciones matemáticas, JavaScript puede convertir números en cadenas:

let x = 5 + 7;       // x.valueOf() es 12,  typeof x es un numero
let x = 5 + "7";     // x.valueOf() es 57,  typeof x es una cadena
let x = "5" + 7;     // x.valueOf() es 57,  typeof x es una cadena
let x = 5 - 7;       // x.valueOf() es -2,  typeof x es un numero
let x = 5 - "7";     // x.valueOf() es -2,  typeof x es un numero
let x = "5" - 7;     // x.valueOf() es -2,  typeof x es un numero
let x = 5 - "x";     // x.valueOf() es NaN, typeof x es un numero

Restar una cadena de una cadena no genera un error pero devolverá NaN (Not a Number):

"Hello" - "Dolly"    // devuelve NaN

Uso de === Comparación

El operador de comparación == siempre convierte (a tipos coincidentes) antes de la comparación.

El operador === fuerza la comparación de valores y tipos:

Ejemplo:

0 == "";        // true
1 == "1";       // true
1 == true;      // true

0 === "";       // false
1 === "1";      // false
1 === true;     // false

Usar parámetros predeterminados

Si se llama a una función sin un argumento faltante, el valor del argumento faltante se establece en undefined.

Los valores no definidos pueden romper su código. Es una buena práctica asignar valores predeterminados a los argumentos.

Ejemplo:

function myFunction(x, y) {
  if (y === undefined) {
    y = 0;
  }
}

ECMAScript 2015 permite parámetros predeterminados en la definición de función:

function (a=1, b=1) { /*codigo de la funcion*/ }

Finalice switch con valores predeterminados

Siempre finalice sus declaraciones switch con un valor default. Incluso si crees que no es necesario.

Ejemplo:

switch (new Date().getDay()) {
  case 0:
    day = "Sunday";
    break;
  case 1:
    day = "Monday";
    break;
  case 2:
    day = "Tuesday";
    break;
  case 3:
    day = "Wednesday";
    break;
  case 4:
    day = "Thursday";
    break;
  case 5:
    day = "Friday";
    break;
  case 6:
    day = "Saturday";
    break;
  default:
    day = "Unknown";
}

Ver ejemplo


Evite números, cadenas y booleanos como objetos

Trate siempre los números, cadenas o valores booleanos como valores primitivos. No como objetos.

Declarar estos tipos como objetos ralentiza la velocidad de ejecución y produce efectos secundarios desagradables:

Ejemplo:

let x = "John";             
let y = new String("John");
(x === y) // es *****falso***** porque *x* es una cadena y "*y*" es un objeto.

O peor aún:

let x = new String("John");             
let y = new String("John");
(x == y) // es *****falso***** porque no puedes comparar objetos.

Evite el uso de eval()

La función eval() se utiliza para ejecutar texto como código. En casi todos los casos no debería ser necesario su uso.

Debido a que permite ejecutar código arbitrario, también representa un problema de seguridad.


W3Schools es el sitio de desarrolladores web más grande del mundo.

Did you find this article valuable?

Support Santos Romero by becoming a sponsor. Any amount is appreciated!