Fancy For Loops
Вы можете использовать стандарт для цикла нестандартными способами
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 быть функцией или выводить что-то напрямую? Я искренне думаю, что это может иметь большое значение.