Не секрет, что в 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('Статус отладки');
Вы увидите, как скрипт остановится в месте отладчика и будет ждать ваших дальнейших действий.

Оператор метки
В 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 в коде, что собственно и вам советую.