- •Введение
- •Введение в JavaScript
- •Справочники и спецификации
- •Редакторы для кода
- •Консоль разработчика
- •Основы JavaScript
- •Привет, мир!
- •Внешние скрипты, порядок исполнения
- •Структура кода
- •Современный стандарт, «use strict»
- •Переменные
- •Правильный выбор имени переменной
- •Шесть типов данных, typeof
- •Основные операторы
- •Операторы сравнения и логические значения
- •Побитовые операторы
- •Взаимодействие с пользователем: alert, prompt, confirm
- •Условные операторы: if, '?'
- •Логические операторы
- •Преобразование типов для примитивов
- •Циклы while, for
- •Конструкция switch
- •Функции
- •Функциональные выражения
- •Именованные функциональные выражения
- •Всё вместе: особенности JavaScript
- •Качество кода
- •Отладка в браузере Chrome
- •Советы по стилю кода
- •Как писать неподдерживаемый код?
- •Автоматические тесты при помощи chai и mocha
- •Структуры данных
- •Введение в методы и свойства
- •Числа
- •Строки
- •Объекты как ассоциативные массивы
- •Объекты: перебор свойств
- •Объекты: передача по ссылке
- •Массивы c числовыми индексами
- •Массивы: методы
- •Массив: перебирающие методы
- •Псевдомассив аргументов «arguments»
- •Дата и Время
- •Замыкания, область видимости
- •Глобальный объект
- •Замыкания, функции изнутри
- •[[Scope]] для new Function
- •Локальные переменные для объекта
- •Модули через замыкания
- •Управление памятью в JavaScript
- •Устаревшая конструкция «with»
- •Методы объектов и контекст вызова
- •Методы объектов, this
- •Преобразование объектов: toString и valueOf
- •Создание объектов через «new»
- •Дескрипторы, геттеры и сеттеры свойств
- •Статические и фабричные методы
- •Явное указание this: «call», «apply»
- •Привязка контекста и карринг: «bind»
- •Функции-обёртки, декораторы
- •Некоторые другие возможности
- •Типы данных: [[Class]], instanceof и утки
- •Формат JSON, метод toJSON
- •setTimeout и setInterval
- •Запуск кода из строки: eval
- •Перехват ошибок, «try..catch»
- •ООП в функциональном стиле
- •Введение
- •Внутренний и внешний интерфейс
- •Геттеры и сеттеры
- •Функциональное наследование
- •ООП в прототипном стиле
- •Прототип объекта
- •Свойство F.prototype и создание объектов через new
- •Встроенные «классы» в JavaScript
- •Свои классы на прототипах
- •Наследование классов в JavaScript
- •Проверка класса: «instanceof»
- •Свои ошибки, наследование от Error
Запустить демо
К решению
Вывести простые числа
важность: 3
Натуральное число, большее 1, называется простым, если оно ни на что не делится, кроме себя и 1.
Другими словами, n>1– простое, если при делении на любое число от 2до n 1есть остаток.
Создайте код, который выводит все простые числа из интервала от 2до 10. Результат должен быть: 2,3,5,7.
P.S. Код также должен легко модифицироваться для любых других интервалов.
К решению
Конструкция switch
Конструкция switchзаменяет собой сразу несколько if.
Она представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.
Синтаксис
Выглядит она так:
switch(x) {
case 'value1': // if (x === 'value1')
...
[break]
case 'value2': // if (x === 'value2')
...
[break]
default:
...
[break]
}
●Переменная xпроверяется на строгое равенство первому значению value1, затем второму value2 и так далее.
●Если соответствие установлено — switch начинает выполняться от соответствующей директивы caseи далее, до ближайшего break(или до конца switch).
● Если ни один caseне совпал — выполняетcя (если есть) вариант default.
При этом caseназывают вариантами switch.
Пример работы
Пример использования switch(сработавший код выделен):
var a = 2 + 2;
switch (a) { case 3:
alert( 'Маловато' ); break;
case 4:
alert( 'В точку!' ); break;
case 5:
alert( 'Перебор' ); break;
default:
alert( 'Я таких значений не знаю' );
}
Здесь оператор switchпоследовательно сравнит aсо всеми вариантами из case.
Сначала 3, затем — так как нет совпадения — 4. Совпадение найдено, будет выполнен этот вариант, со строки alert('В точку!')и далее, до ближайшего break, который прервёт выполнение.
Если breakнет, то выполнение пойдёт ниже по следующим case, при этом остальные проверки игнорируются.
Пример без break:
var a = 2 + 2;
switch (a) { case 3:
alert( 'Маловато' ); case 4:
alert( 'В точку!' ); case 5:
alert( 'Перебор' ); default:
alert( 'Я таких значений не знаю' );
}
В примере выше последовательно выполнятся три alert:
alert( 'В точку!' ); alert( 'Перебор' );
alert( 'Я таких значений не знаю' );
В caseмогут быть любые выражения, в том числе включающие в себя переменные и функции.
Например:
var a = 1; var b = 0;
switch (a) { case b + 1:
alert( 1 ); break;
default:
alert('нет нет, выполнится вариант выше')
}
Группировка case
Несколько значений case можно группировать.
В примере ниже case 3и case 5выполняют один и тот же код:
var a = 2+2; |
|
switch (a) { |
|
case 4: |
|
alert('Верно!'); |
|
break; |
|
case 3: |
// (*) |
case 5: |
// (**) |
alert('Неверно!');
alert('Немного ошиблись, бывает.'); break;
default:
alert('Странный результат, очень странный');
}
При case 3выполнение идёт со строки (*), при case 5— со строки (**).
Тип имеет значение
Следующий пример принимает значение от посетителя.
var arg = prompt("Введите arg?") switch (arg) {
case '0': case '1':
alert( 'Один или ноль' );
case '2':
alert( 'Два' ); break;
case 3:
alert( 'Никогда не выполнится' );
default:
alert('Неизвестное значение: ' + arg)
}
Что оно выведет при вводе числа 0? Числа 1? 2? 3?
Подумайте, выпишите свои ответы, исходя из текущего понимания работы switchи потом читайте дальше…
●При вводе 0выполнится первый alert, далее выполнение продолжится вниз до первого breakи выведет второй alert('Два'). Итого, два вывода alert.
●При вводе 1произойдёт то же самое.
●При вводе 2, switchперейдет к case '2', и сработает единственный alert('Два').
●При вводе 3, switchперейдет на default. Это потому, что promptвозвращает строку '3', а не число. Типы разные. Оператор switchпредполагает строгое равенство ===, так что совпадения не будет.
Задачи
Напишите «if», аналогичный «switch»
важность: 5
Напишите if..else, соответствующий следующему switch:
switch (browser) { case 'IE':
alert( 'О, да у вас IE!' ); break;
case 'Chrome': case 'Firefox': case 'Safari': case 'Opera':
alert( 'Да, и эти браузеры мы поддерживаем' ); break;
default:
alert( 'Мы надеемся, что и в вашем браузере все ок!' );
}
К решению
Переписать if'ы в switch
важность: 4
Перепишите код с использованием одной конструкции switch:
