Table of contents
- Evite las variables globales
- Declarar siempre variables locales
- Declaraciones al inicio
- Inicializar variables
- Declarar objetos con const
- Declarar matrices con const
- No utilices new Object()
- Cuidado con las conversiones automáticas de tipo de dato
- Uso de === Comparación
- Usar parámetros predeterminados
- Finalice switch con valores predeterminados
- Evite números, cadenas y booleanos como objetos
- Evite el uso de eval()
Evite las variables globales como:
new
,=
yeval()
.
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 denew String()
Utilice
0
en lugar denew Number()
Utilice
false
en lugar denew Boolean()
Utilice
{}
en lugar denew Object()
Utilice
[]
en lugar denew Array()
Utilice
/()/
en lugar denew RegExp()
Utilice
function (){}
en lugar denew 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
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";
}
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.