Fantasía para bucles
puede usar el bucle estándar para formas no estándar
for ( a; b; c )
es esencialmente equivalente a:
a;
while ( b )
{
...
c;
}
así que un buen truco es escribir su código con un while
bucle y luego dividirlo en a,b,c
partes en un for
bucle.
Un par de ejemplos que he escrito :
for(x=y=n;!z;x--,y++)z=i(x)?x:i(y)?y:0
for(a=b=1;b<n;c=a+b,a=b,b=c);
Encadena a tus acomodadores
Si está inicializando o restableciendo múltiples valores, encadene el valor a todas las variables que lo necesitan:
a=b=1;
Casting implícito
No verifiques tus tipos, solo úsalos como están. parseInt()
cuesta 10
personajes. Si necesita expulsar de una cadena, sea creativo:
a='30';
b='10';
c = a + b; //failure
c = parseInt(a) + parseInt(b) //too long
c = -(-a-b); //try these
c = ~~a+~~b;
c = +a+ +b;
c = a- -b;
Evitar los punto y coma
JavaScript tiene inserción automática de punto y coma. Úselo a menudo y bien.
One-liners
Ahorre entre paréntesis empujando tanto como sea posible en líneas individuales o parámetros:
a( realParam1, realParam2, fizz='buzz' )
Operadores de aumento / disminución
a = a - 1;
foo(a);
y
foo(a);
a = a - 1;
puede reescribirse fácilmente como
foo(--a);
y
foo(a--);
respectivamente.
Usar this
o en self
lugar de window
en contexto global
Ahorro autoexplicativo de 2 caracteres.
Use la notación de paréntesis para repetir el acceso a la propiedad
Este es definitivamente un acto de equilibrio entre la longitud del nombre de la propiedad y el número de accesos. En lugar de llamar a.longFunctionName()
dos veces con notación de punto, es más corto guardar el nombre y llamar a la función mediante notación de paréntesis:
a.longFunctionName(b)
a.longFunctionName(c)
//42
-vs-
a[f='longFunctionName'](b)
a[f](c)
//34
Esto es especialmente efectivo con funciones como las document.getElementById
que se pueden reducir a d[e]
.
Nota:
Con la notación de corchetes, el costo son 6 + name.length
caracteres la primera vez. Cada acceso posterior tiene un costo de 3
caracteres.
Para la notación de puntos, todos los accesos cuestan name.length + 1
(+1 para los .
) caracteres.
Use este método si 6 + name.length + (3 * (accesses - 1)) < accesses * (name.length + 1)
.
len = longitud del nombre de la propiedad
i = accesos mínimos para aprovechar
len | i
========
1 | ∞
2 | ∞
3 | 7
4 | 4
5 | 3
6 | 3
7 | 3
8+ | 2
El número de accesos también puede abarcar múltiples objetos. Si accede .length
4 o más veces en diferentes matrices, puede usar la misma variable que contiene la cadena 'length'
.
var
)? ¿Y el código de golf JavaScript debería ser una función o generar algo directamente? Sinceramente, creo que esto puede hacer mucha diferencia.