Fancy For Loops
możesz użyć standardowej pętli dla niestandardowych sposobów
for ( a; b; c )
jest zasadniczo równoważny z:
a;
while ( b )
{
...
c;
}
więc dobrą sztuczką jest napisanie kodu w while
pętli, a następnie podzielenie go na a,b,c
części w for
pętli.
Kilka przykładów , które napisałem :
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);
Połącz swoje setery
Jeśli inicjujesz lub resetujesz wiele wartości, połącz wartość ze wszystkimi potrzebnymi zmiennymi:
a=b=1;
Implicit Casting
Nie sprawdzaj typów, po prostu używaj ich takimi, jakie są. parseInt()
kosztuje 10
postacie. Jeśli chcesz odrzucić ciąg, bądź kreatywny:
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;
Unikaj średników
JavaScript ma automatyczne wstawianie średników. Używaj go często i dobrze.
Jednowarstwowe
Zaoszczędź na nawiasach, umieszczając jak najwięcej w pojedynczych wierszach lub parametrach:
a( realParam1, realParam2, fizz='buzz' )
Operatory inkrementacji / dekrementacji
a = a - 1;
foo(a);
i
foo(a);
a = a - 1;
można łatwo przepisać jako
foo(--a);
i
foo(a--);
odpowiednio, kolejno.
Użyj this
lub self
zamiast window
w kontekście globalnym
oczywiste oszczędności 2 znaków.
Użyj notacji w nawiasach, aby uzyskać dostęp do powtarzanych właściwości
Jest to z pewnością równowaga między długością nazwy nieruchomości a liczbą dostępów. Zamiast wywoływać a.longFunctionName()
dwukrotnie notację kropkową, krótsze jest zapisanie nazwy i wywołanie funkcji za pomocą notacji nawiasowej:
a.longFunctionName(b)
a.longFunctionName(c)
//42
-vs-
a[f='longFunctionName'](b)
a[f](c)
//34
jest to szczególnie skuteczne w przypadku funkcji, document.getElementById
które można zredukować do d[e]
.
Uwaga:
Przy zapisie w nawiasie 6 + name.length
za pierwszym razem koszt to znaki. Każdy kolejny dostęp ma koszt 3
znaków.
W przypadku notacji kropkowej wszystkie wejścia kosztują name.length + 1
(+1 dla .
) znaków.
Użyj tej metody, jeśli 6 + name.length + (3 * (accesses - 1)) < accesses * (name.length + 1)
.
len = długość nazwy właściwości
i = minimalny dostęp, aby skorzystać
len | i
========
1 | ∞
2 | ∞
3 | 7
4 | 4
5 | 3
6 | 3
7 | 3
8+ | 2
Liczba dostępów może również obejmować wiele obiektów. Jeśli uzyskujesz dostęp .length
4 lub więcej razy na różnych tablicach, możesz użyć tej samej zmiennej przechowującej ciąg 'length'
.
var
)? I czy kod JavaScript do golfa powinien być funkcją, czy wyświetlać coś bezpośrednio? Szczerze uważam, że może to mieć duże znaczenie.