Четыре полезных JavaScript оператора, о которых вы могли не знать

Не секрет, что в JavaScript, операторы, предоставляют нам огромные возможности для реализации различных видов и типов логики в коде. Каждый оператор в JavaScript имеет свое назначение и синтаксис. Среди самых распространенных операторов можно выделить: условные операторы, операторы итерации и т.д. В этом посте я рассмотрю 4 не очень известных JavaScript оператора, ранее о которых вы могли и не знать, однако они помогут расширить ваши познания в JavaScript и взглянуть на ваш JS код по новому…

Пустой оператор

Вместо любого JavaScript оператора вы можете добавить пустой оператор, который пишется просто как точка с запятой – ;. Когда JavaScript интерпретатор доходит до пустого оператора и пытается его интерпретировать, то ничего не происходит и никакой код не выполняется. Поэтому пустые операторы также могут использоваться для замены подоператоров, которые вы не хотите выполнять.

Давайте теперь для наглядности рассмотрим пару примеров. Допустим у нас есть переменная cart со значением по умолчанию «пусто» и обычная переменная goods, которая дальше по коду будет менять переменную cart в зависимости от условия goods < 7 и тогда переменная примет значение – «мало» либо «много» при условии goods > 7 в противном случае мы сгенерируем ошибку. Пример кода:

var cart = 'пусто',
    goods; 
 
if(goods>0 && goods<7) 
    cart = 'мало';
else if(goods>7 && goods<15)
    cart = 'много';
else
    throw "Ошибка";

Однако код выше выдаст ошибку если значение переменной goods будет равно 7, а значение переменной cart так и останется — «пусто». Так быть естественно не должно, поэтому добавим в код пустой оператор ; и возьмем его в условие  goods === 7.  После этого получится следующий код:

var cart = 'пусто',
    goods; 
 
if(goods>0 && goods<7) 
    cart = 'мало';
else if(goods===7)
    ; // пустой оператор
else if(goods>7 && goods<15)
    cart = 'много';
else
    throw "Ошибка";

Теперь если goods === 7, интерпретатор не выполнит никаких инструкций и переменная cart сохранит свое значение по умолчанию.

Также например пустой оператор можно использовать при заполнении массива с помощью цикла.

var cart = [];
 
for(var i = 0; i < 5; cart[i++] = i)
    ; // пустой оператор
console.log(cart); 
// [1, 2, 3, 4, 5]

Код выше выглядит слегка необычно, и все из-за того, что у цикла отсутствуют фигурные скобки и вместо них написан пустой оператор, который как раз и отвечает за безошибочное выполнение кода и правильное зацикливание. Обратите внимание также на интересную запись  cart[i++] = i, которая выполняется для каждой итерации цикла в рамках условия и массив каждый раз получает экземпляр со значениями i.

Оператор отладки (debugger)

В инструментах отладки в любой строчке исходного кода можно добавить специальные маркеры (контрольные точки) для обозначения места из которого будет происходить отладка.

В JavaScript оператор отладки работает так же как и стоп-точки (брекпоинты) за исключением того, что оператор непосредственно вставляется в исходный код, а не используется в качестве инструмента. Любой запущенный отладчик остановит выполнение скрипта, когда тот достигнет оператора debugger для того чтобы помочь вам в отладке кода.

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

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

console.log('Тест');
debugger;
console.log('Статус отладки');

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

Пример кода с оператором отладки debugger

Оператор метки

В JavaScript вы можете добавлять метки к определенными операторам. Делая пометки вы в дальнейшем сможете перейти к помеченному оператору, просто использовав его метку в коде. Если вам не совсем ясно как это выглядит, то можете провести аналогию с языком Pascal, где для перехода к меткам использовался оператор goto.

Помеченные операторы могут только использоваться вместе с операторами break и continue, т.к в JavaScript нет явного оператора goto в отличие от того же Pascal.

Break и continue могут быть использованы только внутри оператора цикла, такого как например for, внутри которого при прохождении цикла можно сделать исключение, а затем без проблем вернуться к очередной итерации. Таким образом, используя метки в цикле, вместе с continue или break можно легко контролировать его выполнение.

Синтаксис меточных операторов очень прост, вам просто нужно добавить имя метки с двоеточием в конце, как в примере ниже, где использованы метки вместе с циклом for.

loop: for(var i=0; i<5; i++){
    if(i===2) 
        continue loop;
    console.log(i); 
    // 0, 1, 3, 4
}

Когда значение переменной i равно 2, то выполнение цикла переходит опять в начало, вместо того чтобы выполняться дальше и вывести к консоли – 2.

Теперь рассмотрим другой пример с оператором break. Просто замените слово continue на break в коде выше, и при выполнении кода цикл никуда «прыгать» не будет, а остановится, когда значение переменой i будет равно двум.

loop: for(var i=0; i<5; i++){
    if(i===2) 
        break loop;
    console.log(i); 
    // 0, 1
}

Приведенные выше примеры кода были очень простыми и я надеюсь помогли вам разобраться в том, как работают операторы меток, но при разработке метки обычно используются в очень сложных кусках кода с циклами, где например необходимо «прыгать» между разными циклами, как в примере ниже.

loop: for(var i=0; i<4; i++) {
 for(var j=0; j<2; j++) {   
     if(i===2 && j===1) 
        break loop;
     console.log(i+'-'+j);     
 }
}

В коде выше внешний цикл остановиться на значении 2 в переменной i и на 1 у переменной j, и консоль выведет следующий код.

0-0
0-1
1-0
1-1
2-0

Оператор with

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

Оператор with создает область действия, в пределах которой ссылаться на свойства указанного объекта можно без специального префикса. Как будет показано далее в примере, оператором with можно пользоваться в самых разных целях. Например:

var person = {
    firstName: 'Иван',
    lastName: 'Иванов',
    age: '17',
    country: 'Беларуси'
};
 
with(person) {
    console.log('Привет меня зовут ' + firstName + ' ' + lastName + 
    '. Мне ' + age + ' лет и я живу в ' + country + '.');
}
// Привет меня зовут Иван Иванов. Мне 17 лет и я живу в Беларуси.

А теперь давайте взглянем, как пример выше выглядел бы без применения оператора with:

var person = {
    firstName: 'Иван',
    lastName: 'Иванов',
    age: '17',
    country: 'Беларуси'
};
 
console.log('Привет меня зовут ' + person.firstName + ' ' + person.lastName + 
'. Мне ' + person.age + ' лет и я живу в ' + person.country + '.');
// Привет меня зовут Иван Иванов. Мне 17 лет и я живу в Беларуси.

Как видите, используя оператор with можно здорово сократить код, если вы работаете с объектами содержащие много свойств.

Однако повторюсь, использовать этот код в строгом режиме не получится и оператор with целесообразно использовать только в случае «простого» объекта, как в примере выше. Поэтому в общем и целом я не сторонник ярого применения оператора with в коде, что собственно и вам советую.

Подписаться на новые статьи