Fantasia per loop
puoi usare lo standard per loop in modi non standard
for ( a; b; c )
è sostanzialmente equivalente a:
a;
while ( b )
{
...
c;
}
quindi un buon trucco è scrivere il codice con un while
ciclo e quindi dividerlo nelle a,b,c
parti in un for
ciclo.
Un paio di esempi che ho scritto :
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);
Incatena i tuoi setter
Se stai inizializzando o reimpostando più valori, concatenalo su tutte le variabili che ne hanno bisogno:
a=b=1;
Casting implicito
Non controllare i tuoi tipi, basta usarli così come sono. parseInt()
costa 10
personaggi. Se devi eseguire il cast di una stringa, sii 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;
Evita punti e virgola
JavaScript ha l'inserimento automatico di punti e virgola. Usalo spesso e bene.
One-liner
Risparmia tra parentesi spostando il più possibile in singole righe o parametri:
a( realParam1, realParam2, fizz='buzz' )
Operatori di incremento / decremento
a = a - 1;
foo(a);
e
foo(a);
a = a - 1;
può essere facilmente riscritto come
foo(--a);
e
foo(a--);
rispettivamente.
Utilizzare this
o self
anziché window
nel contesto globale
autoesplicativo risparmio di 2 caratteri.
Utilizzare la notazione parentesi per ripetere l'accesso alle proprietà
Questo è sicuramente un atto di bilanciamento tra lunghezza del nome della proprietà e numero di accessi. Invece di chiamare a.longFunctionName()
due volte con la notazione a punti, è più breve salvare il nome e chiamare la funzione tramite la notazione a parentesi:
a.longFunctionName(b)
a.longFunctionName(c)
//42
-confrontarli-
a[f='longFunctionName'](b)
a[f](c)
//34
questo è particolarmente efficace con funzioni come quelle document.getElementById
che possono essere ridotte a d[e]
.
Nota:
Con la notazione parentesi, il costo è in 6 + name.length
caratteri la prima volta. Ogni accesso successivo ha un costo di 3
caratteri.
Per la notazione punto, tutti gli accessi costano name.length + 1
(+1 per i .
) caratteri.
Utilizzare questo metodo se 6 + name.length + (3 * (accesses - 1)) < accesses * (name.length + 1)
.
len = lunghezza del nome della proprietà
i = accessi minimi per trarne vantaggio
len | i
========
1 | ∞
2 | ∞
3 | 7
4 | 4
5 | 3
6 | 3
7 | 3
8+ | 2
Il numero di accessi può anche comprendere più oggetti. Se si accede .length
4 o più volte su array diversi, è possibile utilizzare la stessa variabile che contiene la stringa 'length'
.
var
)? E il codice golf di JavaScript dovrebbe essere una funzione o produrre qualcosa direttamente? Sinceramente penso che questo possa fare molta differenza.