Prácticas recomendadas de JavaScript

Evite variables globales,new,===,eval()

Evitar variables globales

Intente usar lo menos posible variables globales.

Incluye todos los tipos de datos, objetos y funciones.

Las variables globales y las funciones pueden ser sobrescritas por otros scripts.

Utilice variables locales en su lugar y aprenda a cómo usarClosures

Siempre declarar variables locales

Todas las variables utilizadas dentro de la función deben declararse comoLocalVariables.

Variables localesEs necesarioA través de var Declarar con palabras clave, de lo contrario se convertirán en variables globales.

El modo estricto no permite variables no declaradas.

Declarar en la parte superior

Una buena práctica de codificación es declarar todas las declaraciones en la parte superior de cada sección de script o función.

Los beneficios de esto son:

  • Obtener un código más limpio
  • Ofrece un buen lugar para buscar variables locales
  • Es más fácil evitar variables globales innecesarias
  • Reducir la posibilidad de redeclaraciones innecesarias
// Declarar en la parte superior
var firstName, lastName, price, discount, fullPrice;
// Usar más tarde
firstName = "Bill";
lastName = "Gates";
price = 19.90;
discount = 0.10;
fullPrice = price * 100 / discount;

También se puede usar para variables de bucle:

// Declarar en la parte superior
var i;
// Usar más tarde
for (i = 0; i < 5; i++)  {

Por defecto, JavaScript moverá todas las declaraciones al principio (levantamiento de JavaScript).

Inicializar variables

Es una buena costumbre inicializar las variables cuando se declaran.

Los beneficios de esto son:

  • Código más limpio
  • Inicialice las variables en una ubicación separada
  • Evite valores no definidos
// Declare e inicialice en la parte superior
var firstName = "",
    lastName  = "",
    price = 0,
    discount = 0,
    fullPrice  = 0,
    myArray = [],
    myObject = {};

La inicialización de variables nos permite entender el uso esperado y el tipo de datos esperado.

No declare objetos de números, cadenas o booleanos

Siempre considere los números, cadenas o valores booleanos como valores primitivos y no como objetos.

Si se declaran estos tipos como objetos, puede ralentizar la ejecución y producir efectos secundarios desagradables:

Ejemplo

var x = "Bill";             
var y = new String("Bill");
(x === y) // El resultado es false, porque x es una cadena y y es un objeto.

Pruebe usted mismo

O incluso peor:

Ejemplo

var x = new String("Bill");             
var y = new String("Bill");
(x == y) // El resultado es false, porque no puede compararse un objeto.

Pruebe usted mismo

No utilice new Object()

  • Utilice {} en lugar de new Object()
  • Utilice "" en lugar de new String()
  • Utilice 0 en lugar de new Number()
  • Utilice false en lugar de new Boolean()
  • Utilice [] en lugar de new Array()
  • Utilice /()/ en lugar de new RegExp()
  • Utilice function (){} en lugar de new Function()

Ejemplo

var x1 = {};           // Nuevo objeto
var x2 = "";           // Nuevo valor de cadena primitiva
var x3 = 0;            // Nuevo valor numérico primitivo
var x4 = false;        // Nuevo valor booleano primitivo
var x5 = [];           // Nuevo objeto de array
var x6 = /()/;         // Nuevo objeto de expresión regular
var x7 = function(){}; // Nuevo objeto de función

Pruebe usted mismo

Tenga presente la conversión automática de tipos

Tenga presente que los números pueden convertirse accidentalmente en cadenas o NaN(No es un número).

JavaScript es de tipo suelto. Las variables pueden contener diferentes tipos de datos y pueden cambiar su tipo de datos:

Ejemplo

var x = "Hello";     // typeof x es cadena
x = 5;               // cambiar typeof x a numérico

Pruebe usted mismo

Si se realiza una operación matemática, JavaScript puede convertir los números a cadenas:

Ejemplo

var x = 5 + 7;       // x.valueOf() es 12, typeof x es numérico
var x = 5 + "7";     // x.valueOf() es 57, typeof x es cadena
var x = "5" + 7;     // x.valueOf() es 57, typeof x es cadena
var x = 5 - 7;       // x.valueOf() es -2, typeof x es numérico
var x = 5 - "7";     // x.valueOf() es -2, typeof x es numérico
var x = "5" - 7;     // x.valueOf() es -2, typeof x es numérico
var x = 5 - "x";     // x.valueOf() es NaN, typeof x es numérico

Pruebe usted mismo

Restar cadenas de texto no produce errores, sino que devuelve NaN(No es un número):

Ejemplo

"Hello" - "Dolly"    // devuelve NaN

Pruebe usted mismo

Usar === para comparar

== Los operadores de comparación siempre realizan la conversión de tipo antes de la comparación (para que coincida con el tipo).

=== Los operadores comparan forzadamente los valores y los tipos:

Ejemplo

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

Pruebe usted mismo

Uso de valores predeterminados de parámetros

Si falta un argumento al llamar a la función, el valor de ese argumento faltante se establecerá como undefined

undefined Los valores pueden destruir su código. Establecer valores predeterminados para los parámetros es una buena costumbre.

Ejemplo

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

Pruebe usted mismo

Por favor reviseParámetros de la funciónEn este capítulo, lea más sobre los parámetros de la función.

use default para finalizar el switch

Por favor use por defecto para finalizar su switch La declaración. Incluso si piensa que no es necesario.

Ejemplo

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

Pruebe usted mismo

Evite el uso de eval()

eval() La función se utiliza para permitir texto como código. En casi todos los casos, no es necesario usarlo.

Debido a que permite que se ejecute código arbitrario, también significa que hay problemas de seguridad.