Фантазія для петель
ви можете використовувати стандарт для циклу нестандартними способами
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
Кількість доступу також може охоплювати декілька об'єктів. Якщо ви отримуєте доступ до .length4 або більше разів на різних масивах, ви можете використовувати ту саму змінну, що містить рядок 'length'.
var)? І чи повинен код JavaScript для гольфу бути функцією або виводити щось безпосередньо? Я чесно думаю, що це може мати велике значення.