Фантазія для петель
ви можете використовувати стандарт для циклу нестандартними способами
for ( a; b; c )
по суті еквівалентний:
a;
while ( b )
{
...
c;
}
тому хороший трюк - написати свій код із while
циклом, а потім розділити його на a,b,c
частини в for
циклі.
Я написав кілька прикладів :
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);
Закріпіть свої сетери
Якщо ви ініціалізуєте або скидаєте кілька значень, зв’яжіть це значення на всі змінні, які потребують його:
a=b=1;
Неявне кастинг
Не перевіряйте свої типи, просто використовуйте їх такими, якими вони є. parseInt()
вартість 10
символів. Якщо вам потрібно викинути рядок, будьте креативними:
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;
Уникайте напівколонок
У JavaScript є автоматична вставка напівколонки. Використовуйте його часто і добре.
Однолінійні
Збережіть на дужках, засунувши якомога більше в окремі рядки або параметри:
a( realParam1, realParam2, fizz='buzz' )
Оператори збільшення / зменшення
a = a - 1;
foo(a);
і
foo(a);
a = a - 1;
легко можна переписати як
foo(--a);
і
foo(a--);
відповідно.
Використовувати this
або self
замість цього window
в глобальному контексті
самооцінка 2 заощадження символів.
Використовуйте позначення дужок для повторного доступу до властивостей
Це, безумовно, акт балансування між довжиною імені властивості та кількістю доступу. Замість того, щоб дзвонити a.longFunctionName()
з нотацією крапками двічі, коротше зберегти ім'я та викликати функцію через нотацію дужок:
a.longFunctionName(b)
a.longFunctionName(c)
//42
-vs-
a[f='longFunctionName'](b)
a[f](c)
//34
це особливо ефективно при таких функціях, до document.getElementById
яких можна звести d[e]
.
Примітка:
За допомогою позначення дужок вартість вказується 6 + name.length
символами вперше. Кожен наступний доступ має вартість 3
символів.
Для позначення точок усі звернення коштують name.length + 1
(+1 для .
) символів.
Використовуйте цей метод, якщо 6 + name.length + (3 * (accesses - 1)) < accesses * (name.length + 1)
.
len = довжина назви властивості
i = мінімальний доступ для використання
len | i
========
1 | ∞
2 | ∞
3 | 7
4 | 4
5 | 3
6 | 3
7 | 3
8+ | 2
Кількість доступу також може охоплювати декілька об'єктів. Якщо ви отримуєте доступ до .length
4 або більше разів на різних масивах, ви можете використовувати ту саму змінну, що містить рядок 'length'
.
var
)? І чи повинен код JavaScript для гольфу бути функцією або виводити щось безпосередньо? Я чесно думаю, що це може мати велике значення.