Los últimos tutoriales de desarrollo web
 

JavaScript Mejores prácticas


Evitar las variables globales, evite new , evitar == , evitar eval()


Evitar variables globales

Minimizar el uso de variables globales.

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

variables y funciones globales pueden ser sobrescritos por otros scripts.

Utilizar variables locales en su lugar, y aprender cómo utilizar los cierres .


Siempre declarar variables locales

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

Las variables locales deben declarar con la var palabra clave, de lo contrario se convertirán en variables globales.

El modo estricto no permite que las variables no declaradas.


Declaraciones sobre el Top

Es una buena práctica de codificación para poner todas las declaraciones en la parte superior de cada script o función.

Esta voluntad:

  • Dé el código más limpio
  • Proporcionar un único lugar para buscar las variables locales
  • Que sea más fácil evitar las variables globales no deseados (implícitas)
  • Reducir la posibilidad de re-declaraciones no deseados
// Declare at the beginning
var firstName, lastName, price, discount, fullPrice;

// Use later
firstName = "John";
lastName = "Doe";

price = 19.90;
discount = 0.10;

fullPrice = price * 100 / discount;

Esto también se aplica a variables de bucle:

// Declare at the beginning
var i;

// Use later
for (i = 0; i < 5; i++) {

Por defecto, todas las declaraciones JavaScript mueve a la parte superior (elevación JavaScript).


inicializar variables

Es una buena práctica de codificación para inicializar las variables cuando se declaran.

Esta voluntad:

  • Dé el código más limpio
  • Proporcionar un único lugar para inicializar variables
  • Evitar valores no definidos
// Declare and initiate at the beginning
var firstName = "",
    lastName = "",
    price = 0,
    discount = 0,
    fullPrice = 0,
    myArray = [],
    myObject = {};

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


Nunca Declarar el número, cadena o booleanas objetos

Siempre trate números, cadenas, o booleanos como valores primitivos. No como objetos.

La declaración de este tipo como objetos, se ralentiza la velocidad de ejecución, y produce efectos secundarios desagradables:

Ejemplo

var x = "John";             
var y = new String("John");
(x === y) // is false because x is a string and y is an object.
Inténtalo tú mismo "

O lo que es peor:

Ejemplo

var x = new String("John");             
var y = new String("John");
(x == y) // is false because you cannot compare objects.
Inténtalo tú mismo "

No use new Object()

  • Usar {} en lugar de new Object()
  • Use "" en lugar de new String()
  • Utilice 0 en lugar del 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 = {};           // new object
var x2 = "";           // new primitive string
var x3 = 0;            // new primitive number
var x4 = false;        // new primitive boolean
var x5 = [];           // new array object
var x6 = /()/;         // new regexp object
var x7 = function(){}; // new function object
Inténtalo tú mismo "

Cuidado con las conversiones automáticas Tipo

Ten en cuenta que los números accidentalmente se pueden convertir en cadenas o NaN (Not a Number).

JavaScript se escribe sin apretar. Una variable puede contener diferentes tipos de datos, y una variable puede cambiar su tipo de datos:

Ejemplo

var x = "Hello";     // typeof x is a string
x = 5;               // changes typeof x to a number
Inténtalo tú mismo "

Al hacer operaciones matemáticas, JavaScript puede convertir números a cadenas:

Ejemplo

var x = 5 + 7;       // x.valueOf() is 12,  typeof x is a number
var x = 5 + "7";     // x.valueOf() is 57,  typeof x is a string
var x = "5" + 7;     // x.valueOf() is 57,  typeof x is a string
var x = 5 - 7;       // x.valueOf() is -2,  typeof x is a number
var x = 5 - "7";     // x.valueOf() is -2,  typeof x is a number
var x = "5" - 7;     // x.valueOf() is -2,  typeof x is a number
var x = 5 - "x";     // x.valueOf() is NaN, typeof x is a number
Inténtalo tú mismo "

Restando una cadena de una cadena, no genera un error pero devuelve NaN (Not a Number):

Ejemplo

"Hello" - "Dolly"    // returns NaN
Inténtalo tú mismo "

Utilice === Comparación

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

El === comparación fuerzas de operadores de valores y tipo:

Ejemplo

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

0 === "";       // false
1 === "1";      // false
1 === true;     // false
Inténtalo tú mismo "

Usar los valores predeterminados de los parámetros

Si una función se llama con un argumento que falta, el valor del argumento faltante se establece en undefined .

Los valores no definidos pueden romper su código. Es un buen hábito para asignar valores por defecto a los argumentos.

Ejemplo

function myFunction(x, y) {
    if (y === undefined) {
        y = 0;
    }
}
Inténtalo tú mismo "

Leer más acerca de los parámetros de función y los argumentos en los parámetros de funciones


Poner fin a sus interruptores con valores predeterminados

Siempre terminan sus sentencias switch con un valor predeterminado. Incluso si usted piensa que no hay necesidad de hacerlo.

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";
}
Inténtalo tú mismo "

Evitar el uso de eval()

El eval() función se utiliza para que el texto como código. En casi todos los casos, no debería ser necesario usarlo.

Porque permite código arbitrario ejecutado, también representa un problema de seguridad.