Fantasia para loops
você pode usar o padrão para loop de maneiras não padronizadas
for ( a; b; c )
é essencialmente equivalente a:
a;
while ( b )
{
...
c;
}
portanto, um bom truque é escrever seu código com um while
loop e depois dividi-lo nas a,b,c
partes em um for
loop.
Alguns exemplos que escrevi :
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);
Encadear seus setters
Se você estiver inicializando ou redefinindo vários valores, encadeie o valor a todas as variáveis que precisam:
a=b=1;
Fundição implícita
Não verifique seus tipos, use-os como estão. parseInt()
custa 10
caracteres. Se você precisar eliminar uma string, seja criativo:
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 ponto e vírgula
JavaScript tem inserção automática de ponto e vírgula. Use-o com frequência e bem.
One-liners
Economize entre colchetes, empurrando o máximo possível em linhas únicas ou parâmetros:
a( realParam1, realParam2, fizz='buzz' )
Operadores de incremento / decréscimo
a = a - 1;
foo(a);
e
foo(a);
a = a - 1;
pode ser facilmente reescrito como
foo(--a);
e
foo(a--);
respectivamente.
Use this
ou em self
vez de window
no contexto global
economia de 2 caracteres auto-explicativa.
Use notação de colchete para acesso repetido à propriedade
Esse é definitivamente um ato de equilíbrio entre o comprimento do nome da propriedade e o número de acessos. Em vez de chamar a.longFunctionName()
com notação de ponto duas vezes, é mais curto salvar o nome e chamar a função via notação entre colchetes:
a.longFunctionName(b)
a.longFunctionName(c)
//42
-vs-
a[f='longFunctionName'](b)
a[f](c)
//34
isso é especialmente eficaz com funções como as document.getElementById
quais podem ser reduzidas a d[e]
.
Nota:
Com a notação entre colchetes, o custo é de 6 + name.length
caracteres na primeira vez. Cada acesso subsequente tem um custo de 3
caracteres.
Para notação de pontos, todos os acessos custam name.length + 1
(+1 para os .
) caracteres.
Use este método se 6 + name.length + (3 * (accesses - 1)) < accesses * (name.length + 1)
.
len = comprimento do nome da propriedade
i = acessos mínimos para aproveitar
len | i
========
1 | ∞
2 | ∞
3 | 7
4 | 4
5 | 3
6 | 3
7 | 3
8+ | 2
O número de acessos também pode abranger vários objetos. Se você acessar .length
4 ou mais vezes em matrizes diferentes, poderá usar a mesma variável segurando a string 'length'
.
var
)? E o código de golfe JavaScript deve ser uma função ou gerar algo diretamente? Sinceramente, acho que isso pode fazer muita diferença.