Условные операторы, операторы циклов, переходы и метки.
Условные операторы
Оператор if
Оператор if («если») получает условие, вычисляет его, и если результат – true, то выполняет команду. Если нужно выполнить более одной команды – они оформляются блоком кода в фигурных скобках. Рекомендуется использовать фигурные скобки всегда, даже когда команда одна. Это улучшает читаемость кода. Необязательный блок else («иначе») выполняется, если условие неверно.
Оператор вопросительный знак „?“
Он состоит из трех частей: условие ? значение1 : значение2;
Проверяется условие, затем если оно верно – возвращается значение1, если неверно – значение2, например:
access = (age > 14) ? true : false;
Конструкция switch
switch(x) {
case 'value1': // if (x === 'value1')
...
[break]
case 'value2': // if (x === 'value2')
...
[break]
default:
...
[break]
}
Переменная x проверяется на строгое равенство первому значению value1, затем второму value2 и так далее. Если соответствие установлено – switch начинает выполняться от соответствующей директивы case и далее, до ближайшего break (или до конца switch). Если ни один case не совпал – выполняется (если есть) вариант default.
Операторы циклов
Цикл while
Цикл while имеет вид:
while (условие) {
// тело цикла
}
Пока условие верно – выполняется код из тела цикла.
Цикл do..while
Проверку условия можно поставить под телом цикла, используя специальный синтаксис do..while:
do {
// тело цикла
} while (условие);
Цикл, описанный, таким образом, сначала выполняет тело, а затем проверяет условие.
Цикл for
const arr = [1, 2, 3, 4];
for ( let i = 0, n = arr.length; i < n; n--, i++ )
{
}
for..in – для перебора свойств объекта
const obj = {
a: 1,
b: 2,
};
for ( const key in obj )
{
}
for..of (ES2015)
Итерируемые или, иными словами, «перебираемые» объекты – это те, содержимое которых можно перебрать в цикле.
let arr = [1, 2, 3]; // массив — пример итерируемого объекта
for (let value of arr) {
alert(value); // 1, затем 2, затем 3
}
Также итерируемой является строка:
for (let char of "Привет") {
alert(char); // Выведет по одной букве: П, р, и, в, е, т
}
Прерывание цикла break
Выйти из цикла можно не только при проверке условия, но и, вообще, в любой момент. Эту возможность обеспечивает директива break.
Следующая итерация continue
Директива continue прекращает выполнение текущей итерации цикла. Она прерывает не весь цикл, а только текущее выполнение его тела, как будто оно закончилось. Её используют, если понятно, что на текущем повторе цикла делать больше нечего.
Метки для break/continue
Бывает нужно выйти одновременно из нескольких уровней цикла. Для этого используется метка. Метка имеет вид "имя:", имя должно быть уникальным. Она ставится перед циклом:
label:
for ()
{
for()
{
break label;
}
}
Вызов break lable ищет ближайший внешний цикл с такой меткой и переходит в его конец. Директива continue также может быть использована с меткой, в этом случае управление перепрыгнет на следующую итерацию цикла с меткой.
Варианты объявления функций в ES2015, чем они отличаются?
Стандартные способы, которые появились в ранних версиях
// Function Declaration
function sum1(a, b) {
return a + b;
};
// Function Expression
const sum2 = function (a, b) {
return a + b;
};
Основное отличие в том, что Function Declaration, создаются интерпретатором до выполнения кода. Это называется "поднятие функции", то есть функцию можно вызвать до ее объявления.
Параметры по умолчанию
Можно указывать параметры по умолчанию через равенство =, например:
function showMenu(title = "Без заголовка", width = 100, height = 200) {
alert(title + ' ' + width + ' ' + height);
}
showMenu("Меню"); // Меню 100 200
Параметр по умолчанию используется при отсутствующем аргументе или равном undefined. При передаче любого значения, кроме undefined, включая пустую строку, ноль или null, параметр считается переданным, и значение по умолчанию не используется.
Параметры по умолчанию могут быть не только значениями, но и выражениями. Например:
function sayHi(who = getCurrentUser().toUpperCase()) {
alert('Привет, ' + who);
}
function getCurrentUser() {
return 'Вася';
}
sayHi(); // Привет, ВАСЯ
Заметим, что значение выражения getCurrentUser().toUpperCase() будет вычислено, и соответствующие функции вызваны – лишь в том случае, если это необходимо, то есть когда функция вызвана без параметра.