среда, 4 июля 2012 г.

Трюки в javascript

Здесь представлен набор трюков, которые смогут поднять ваш профессиональный уровень использования Javascript. Они немного тяжелее для понимая и почти каждый из них требует изучения дополнительных материалов, но занимают меньше места и немножечко быстрее выполняются. Так же эти приемы могут упростить массивные строчные условия, приведения к типам и прочее. Читаем и учимся.

Как проверить наличие элемента в массиве

var array = [ "a", "b", "c" ];

!!~array.indexOf("a");
// true

!!~array.indexOf("b");
// true

!!~array.indexOf("c");
// true

!!~array.indexOf("d");
// false

// Конечно, если все кажется уж очень заумным, то лучше делать так:

if ( array.indexOf( "a" ) >= 0 ) {
  // ...
}

Приведение типов переменных

var number = 1,
  string = "1",
  bool = false;

number;
// 1

number + "";
// "1"

string;
// "1"

+string;
// 1

+string++;
// 1

string;
// 2

bool;
// false

+bool;
// 0

bool + "";
// "false"

Работа с условиями: массивы, строки, проверка массива на длину, проверка строки на длину, проверка булевых переменных

// Проверяя, есть ли у массива длина,
// вместо:
if ( array.length > 0 ) ...

// проверяйте значение следующего выражения:
if ( array.length ) ...

// Проверяя, пустой ли массив:
// вместо:
if ( array.length === 0 ) ...

// проверяйте значение выражения:
if ( !array.length ) ...

// Проверяя, не пуста ли строка:
// вместо:
if ( string !== "" ) ...

// проверяйте значение выражения:
if ( string ) ...

// Проверяя, пустая ли строка:
// вместо:
if ( string === "" ) ...

// проверяйте ложно ли выражение:
if ( !string ) ...

// Проверяя, является ли переменная истиной,
// вместо:
if ( foo === true ) ...

// проверяйте следующим образом:
if ( foo ) ...

// Проверяя, является ли переменная ложью,
// вместо:    
if ( foo === false ) ...

// проверяйте, используя отрицание:
if ( !foo ) ...

// ...Будьте осторожны, так как это выражение справедливо и для: 0, "", null, undefined, NaN
// Для проверки значения заведомо ложных выражений, используйте:
if ( foo === false ) ...

// Проверяя, если переменная null или undefined, но НЕ ложь, "" или 0,
// вместо:
if ( foo === null || foo === undefined ) ...

// ...воспользуйтесь оператором ==:
if ( foo == null ) ...

// Помните, что сравнение с помощью оператора == с `null` сработает для ОБОИХ `null` и `undefined` 
// но не для `false`, "" или 0
null == undefined

Сравнение переменных с разными типами. Приведение типов переменных

// Отдавай предпочтение `===`, а не `==` (только если конкретный случай не требует не строго типизированной оценки)

// === не приводит типы принудительно, т.е.:

"1" === 1;
// false

// == приводит типы принудительно, т.е.:

"1" == 1;
// true

// Логические выражения, Истинные и Ложные

// Логические выражения:
true, false

// Истинные:
"foo", 1

// Ложные:
"", 0, null, undefined, NaN, void 0

Всем спасибо, жду ваших комментариев по этим и другим способам оптимизации.