«JavaScript. Шаблоны». Лучшие издержки из книги. Часть 1

Не так-то давно я прочитал книгу Стояна Стефанова под названием «JavaScript. Шаблоны«. Прочтением остался доволен и советую её к прочтению всем JavaScript-программистам. Это всего 250 страниц, но стоящих 250 страниц с важной информацией для программиста.

JavaScript. Шаблоны

JavaScript. Шаблоны

В этом же посте я хотел бы поделиться теми моментами, которые, по моему мнению, являются важными в этой книге. За одно и освежу память прочитанным материалом.

1. Включайте «строгий режим»

Версия 5 определяет несколько новых встроенных объектов, методов и свойств, но наиболее важным новшеством является введение так называемого строгого (strict) режима, в котором запрещается использование некоторых особенностей языка, что делает программы более простыми и более устойчивыми к ошибкам. Например использование инструкции with, необходимость которой вызывала споры на протяжении нескольких лет. Теперь, согласно ES5, эта инструкция будет вызывать ошибку при выполнении в строгом режиме, а в нестрогом режиме будет выполняться как обычно. Строгий режим включается простой стро- кой, которая игнорируется прежними реализациями языка. Это означает, что попытка включить строгий режим не будет порождать ошибку в броузерах, не поддерживающих такую возможность.

function my() {
    “use strict”; 
    // остальная часть функции...
}

2. Используйте JSLint

О JSLint я уже писал ранее. Почитать о том, что это такое и как оно может помочь программисту можно почитать здесь.

3. Глобальные переменные — это плохо

Переменная, объявленная внутри функции, является локальной по отношению к этой функции и недоступна за ее пределами. С другой стороны, переменные, объявленные или просто используемые за пределами функций, являются глобальными.

В любой среде выполнения JavaScript существует глобальный объект, доступный при использовании ссылки this за пределами функций. Любая создаваемая вами глобальная переменная становится свойством глобального объекта. Все эти переменные находятся в одном глобальном пространстве имен, вследствие чего всегда есть вероятность конфликта имен – когда две различные части приложения определяют глобальные переменные с одинаковыми именами, но для разных целей.

Кроме того, в веб-страницы часто включается программный код, написанный сторонними разработчиками.

function sum(x, y) {
    // антишаблон: подразумеваемая глобальная переменная
    result = x + y;
    return result;
}
function sum(x, y) {
    var result = x + y;
    return result;
}
function foo() {
    var a, b;
    a = b = 0; // обе переменные – локальные
}

4. Доступ к глобальному объекту

В броузерах глобальный объект доступен в любой части сценария как свойство с именем window (если только вы не предприняли каких-либо неожиданных действий, например, объявив локальную переменную с именем window). Однако в других окружениях это удобное свойство может называться иначе (или вообще быть недоступным для программиста). Если вам необходимо обратиться к глобальному объекту без использования жестко определенного идентификатора window, можно вы- полнить следующие операции на любом уровне вложенности в области видимости функции:

var global = (function () {
    return this;
}());

5. Единственный var

function func() {
    var a = 1, 
        b = 2, 
        sum = a + b, 
        myobject = {}, i, j;
    // тело функции...
}
function updateElement() {
    var el = document.getElementById(“result”), 
        style = el.style;
    // Выполнение операций над переменными el и style...
}

6. Избегайте неявного приведения типов

При сравнивании переменных интерпретатор Java Script неявно выполняет приведение типов переменных. Именно поэтому такие операции сравнения, как false == 0 или “” == 0, возвращают true.

Чтобы избежать путаницы, вызванной неявным приведением типов, всегда используйте операторы === и !==, которые сравнивают и значения, и типы выражений, участвующих в операции

var zero = 0;

if (zero === false) {
    // тело этой инструкции не будет выполнено, 
    // потому что zero – это 0, а не false
}

// антишаблон
if (zero == false) {
    // тело этой инструкции будет выполнено
}

7. Не используйте eval() 

Если вы намереваетесь использовать функцию eval() в своем сценарии, вспомните мантру «eval() – это зло». Эта функция принимает произвольную строку и выполняет ее как программный код на JavaScript.

8. Преобразование строки в число с помощью parseInt() 

Функция parseInt() позволяет получить число из строки. Во втором параметре функция принимает основание системы счисления, но этот параметр часто опускается, хотя делать это нежелательно. Проблемы возникают, если строка начинается с символа 0, например, это часть даты, введенной в поле формы. Согласно ECMA Script 3, строки, начинающиеся с символа 0, интерпретируются как восьмеричные числа (в системе счисления с основанием 8). Однако это требование изменилось в ES5. Чтобы избежать несогласованности и получения неожиданных результатов, всегда указывайте параметр, определяющий систему счисления:

var month = “06”,    
    year = “09”;
month = parseInt(month, 10);
year = parseInt(year, 10);

Если в этом примере опустить второй параметр, то вызов parseInt(year) вернет значение 0, потому что строка «09» будет воспринята как представление восьмеричного числа.

9. Соглашения по оформлению программного кода 

На встречах не раз разгорались жаркие споры по поводу отдельных аспектов оформления программного кода (например, как оформлять отступы – символами табуляции или пробелами?). Поэтому, если вы предлагаете утвердить некоторые соглашения по оформлению программного кода в своей организации, готовьтесь столкнуться с сопротивлением и услышать противоположные, не менее сильные аргументы. Помните, что важнее выработать соглашения, любые соглашения, и следовать им, чем настаивать на конкретных  деталях самих соглашений.

10. Примеры «хорошего кода»

function func() {
    return {
        name: “Batman”
    };
}
if (true) {
    alert(“It’s TRUE!”);
}
if (true) {
    alert(1);
} else {
    alert(2);
}
for (var i = 0; i < 10; i += 1) {
    alert(i);
}

Остальные, более «профессиональные», полезности из вышеописанной книги ждите в следующих постах.

«JavaScript. Шаблоны». Лучшие издержки из книги. Часть 1
10 votes, 5.00 avg. rating (99% score)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *