русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Тип имеет значение


Дата добавления: 2015-07-09; просмотров: 718; Нарушение авторских прав


Следующий пример принимает значение от посетителя.

 

var arg = prompt("Введите arg?")
switch(arg) {

 

case '0':
case '1':

 

alert('Один или ноль');
 

 

case '2':
alert('Два');

 

break;
 

 

case 3:
alert('Никогда не выполнится');

 

 
case null:

 

alert('Отмена');
break;

 

 
default:

 

alert('Неизвестное значение: ' + arg)
}

Что оно выведет при вводе чисел 0, 1, 2, 3? Подумайте и потом читайте дальше…

  • При вводе 0 или 1 выполнится первый alert, далее выполнение продолжится вниз до первого break и выведет второй alert('Два').
  • При вводе 2, switch перейдет к case '2' и выведет Два.
  • При вводе3,switchперейдет наdefault. Это потому, что prompt возвращает строку '3', а не число. Типы разные. Switch использует строгое равенство ===, так что совпадения не будет.
  • При отмене сработает case null.

Важность: 4

Перепишите код с использованием одной конструкции switch:

 

var a = +prompt('a?', '');
 

 

if (a == 0) {
alert(0);

 

}
if (a == 1) {

 

alert(1);
}

 

 
if (a == 2 || a == 3) {

 

alert('2,3');
}

Решение

[Открыть задачу в новом окне]

‹ Директивы break и continue Функции ›

01.08.2011

Илья Кантор


Negatoo

var arg = prompt("Введите arg?")
02switch(arg) {
03 case '0':
04 case '1':
05 alert('Один или ноль');
06
07 case '2':
08 alert('Два');
09 break;
10
11 case 3:
12 alert('Никогда не выполнится');
13
14 case null:
15 alert('Отмена');
16 break;
17
18 default:
19 alert('Неизвестное значение: ' + arg)
20}
Разве после case '0':
case '1':
alert('One or zero');
не надо break; ?



Руслан Товмасян

<script>
var input = +prompt('Введите цифру от 1 до 3, 1 - "Привет!", 2 - "Пока!", 3 - "Досвидание!"', '');
switch (input) {
case 1:
alert('Вы ввели ' + input + ' Привет!');
break;
case 2:
alert('Вы ввели ' + input + ' Пока!');
break;
case 3:
alert('Вы ввели ' + input + ' Досвидание');
break;
default:
if(input === undefined) {
alert('Вы нажали отмену.');
}
else alert('Вы ввели не то число если говорить точнее то... ' + input);
}
</script>
Ммм...прочитал начало сразу решил написать что-то вот тут вообщем скрипт просит ввести цифру любую от 1 до 3 если не вводишь то пишет что цифра не та, а если нажимаешь отмену то пишет вы нажали отмену. Сразу заострил своё внимание на отмену и думал как сделать потом вспомнил что undefined это тип который не получил присвоение т.е если переменная равна не присвоенному типу то была нажата отмена) Очень рад что разобрался...может кому будет полезно)

p.s прошу рассказать мне тут... а как сделать так чтобы...при не правильном вводе числа т.е это будет вариант "default" конструкция начала выполняться заново??????

(Изменено автором 1 месяц назад)

Бойко Евгений

1) Обсуждение конкретной задачи идёт в отдельном окне!
2) Чтобы можно было исправить глупость, написанную под своей фамилией, следует зарегистрироваться!
3) Прочитайте как работает функция (http://javascript.ru/parseInt) прежде, чем использовать и тем более писать на форум. Ваше первое решение также неверно! Например, введите: '1a'.
4) Тут рассказывать про циклы глупо, читайте учебник дальше.
5) С undefined используют === ( строгое сравнение )
6) Пока не пользуйтесь логическими операторами!!! Во втором решении: case 2 || 3: === case 2:. А верный результат благодаря case из строчек выше.

Руслан Товмасян

Благодарю за помощь ;) честно не знал про parseInt щас исправлю на +prompt.
5) щас разберусь... Не совсем понял что там не так...
6) спасибо, не сразу понял...когда попробовал убрать строки понял. Просто я не внимательный...
p.s учусь на ошибках, пусть даже так зато не копирую а пишу сам, хотя я очень ленивый :D

кот Вася

а как сделать, чтобы при дефолтном варианте ничего не менялось (выполнялось все как до введения свитча).

а то я не указываю дефолт, у меня и для остальных значений выполняется код, что я описал для одного варианта

DarkZaR

var a = prompt('a?', '');
switch (a){
case '0':
case '1':
alert(a);
break;
case '2':
case '3':
alert('2,3');
break;
}

Мне кажется так выглядит намного красивее решение последней задачи.

Бойко Евгений

Ваше решение не отвечает требованию задания.

Например, введите +1. Вариант автора обработает, а ваш нет.

David

Да, так короче. Но для новичков понятнее пока будет и вариант учебника)

Бойко Евгений

JS - не строго типизированный язык, поэтому строго придётся следить за типами вам! :)

o

·

Руслан Товмасян

var a = +prompt('a?', ''); // Как известно + спереди способен приравнять к числовому типу, "а также есть такая функция как parseInt(переменная), она специализированна на это нежели плюс ;) тогда даже если ввести +1 то все будет отлично ;)" - Бред. ):
switch (a){
case '0':
case '1':
alert(a);
break;
case '2':
case '3':
alert('2,3');
break;
}

(Изменено автором 1 месяц назад)

Бойко Евгений

Это прекрасный учебник. Будьте внимательны! Очень важно чётко выполнять требования. Если вы будете переписывать чужой кусок кода (это задание - есть отличный пример), такое неграмотное использование parseInt, возможно, похерит дальнейшую нормальную работу большой программы.
P.S. Я тоже наступал на все возможные грабли, в том числе и ваши. Это от избытка эмоций при изучении. :)

Dennis

Спасибо огромное за
замечательный сайт!

 

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

Вопрос по примеру к разделу «Тип имеет значение» (кстати,
примеры можно пронумеровать, так было бы легче на них ссылаться):

 

Почему цикл дает алерт с «2»? Я понимаю, что после строки 05
нет брэйка и начинается проверка на «2», но почему проверка дает OK, если arg был 0 или 1? Ведь сказано, что «Switch использует строгое
равенство ===»?

Спасибо

Петрушка

"Если его не прервать — оно пойдёт далее, при этом остальные проверки игнорируются."
Чтобы в этом убедиться можно убрать break из всех case и тогда сработают alertы во всех, если ввести 0 или 1.

Dennis

Точно. Проморгал я эту фразу. Спасибо

Unknow The same

Здравствуйте. Подскажите, пожалуйста. Захотел сделать обработчик форм с помощью switch. Но что-то ничего не пашет. Может кто-то подскажет, в чем беда?

JavaScript
function check() {
var email = document.forms.form1.email.value;
switch (email) {
case email.indexOf("@") < 1:
alert('forgot @ ');
return false;
break;
case email.indexOf(".") < 1:
alert('forgot .');
return false;
break;
}
}

Ну что-то вроде того. Может, я что-то пропустил?

(Изменено автором 5 назад)

Бойко Евгений

Переменная x проверяется на строгое равенство первому значению value1, затем второму value2 и так далее.

Судя по всему, у вас email - строка, email.indexOf("@") < 1 - булевое (true/false).

Петрушка

Мне кажется, что в данном случае switch применяется ну совсем неверно.
Тут лучше так:
function check() { var email = document.forms.form1.email.value; if (email.indexOf("@") < 1) {
alert('forgot @ '); return false;
} if (email.indexOf(".") < 1) {
alert('forgot .');
return false;
}
return true;}

Switch нужно использовать, когда у тебя переменная или выражение может иметь несколько заранее известных значений, чтобы не писать
if (x == 1)... if (x == 2) и т.д.

Бойко Евгений

var a = 3;
var b = 2;
switch(a) {
case b+1:
alert('Выражения использовать в case тоже можно!');
break;
}

visitor

вместо такой строки : else if (browser == 'Chrome' || browser == 'Firefox'
|| browser == 'Safari' || browser == 'Opera')

помойму проще написать так: else if(browser ==('Chrome' ,'Firefox' ,'Safari' ,'Opera'))

P Aianostre

Проще, конечно, только это не одно и то же.
Во втором варианте условие выполнится только если browser == 'Opera'.

Bogdaniman

Я извиняюсь если что-то не понимаю, но зачем "+" перед "prompt" в последнем примере?

eee

Повторите главу Основные операторы пункт унарный, бинарный, операнд

Дмитрий Павлов

Ниже в комментариях писали. + в начале означает, что скрипт воспринимает значение как число. Без + значение будет строкой.

Pafiss

второй prompt без плюса в комментах.

Pafiss

var arg = +prompt ("а?", ""); // +prompt
switch (arg) {
case 0: // 0 как число
...
}
var arg = prompt ("а?", ""); // +prompt switch (arg) { case "0": // 0 как строка ... }

я правильно понял?

Дмитрий

Здравствуйте.
Во время написания курсовой столкнулся со странностью, видимо связанной с областью видимости switch в разных браузерах.
Например, в IE 8 и 9 нормально выполнятся такой код:
...
switch(CardNum) { case 1: { deck=window.deck1.style; if (flagStrokeCard==1) card=window.card1.style; else card=window.computerCard1.style; function moveCardDown(){ movepic++; deck.pixelLeft+=deckLeft; deck.pixelTop+=28; if (movepic==21){ clearInterval(timer); deck.display="none"; deck.pixelLeft=295; deck.pixelTop=30; } } var timer=setInterval(moveCardDown, animationSpeed); break; } case 2: { deckLeft=-2; deck=window.deck2.style; if (flagStrokeCard==1) card=window.card2.style; else card=window.computerCard2.style; moveCardDown(); var timer=setInterval(moveCardDown, animationSpeed); break; } ...
Тогда как FF функцию moveCardDown() не видит и её приходится выносить отдельно с соответствующей передачей параметров.
Хотелось бы узнать подробнее об области видимости switch в разных браузерах.

oneguy

Спецификация ECMAScript запрещает использование объявлений функций внутри блоков, в топ числе switch, if и др. Все объявления функции должны находиться непосредственно в коде верхнего уровня, коде функции или коде eval.
Этим всё сказано. Поэтому не нарушайте данный принцип, чтобы код одинаково выполнялся во всех браузерах.
В данном случае вам, скорее всего, надо лишь перенести объявление функции вне switch.
Конструкция switch не меняет область видимости, то есть внутри switch видны те же переменные, что и вне switch.
Сказанное не касается литералов функций, то есть внутри блоков можно использовать инструкции типа var f=function(){};

Leo

Синтаксис контструкции switch настолько плох во всех Си-образных языках, что лучше уж просто не замусоривать им голову и ограничиться if

P Aianostre

Не, в джаваскрипте уж лучше юзать вместо свича объект, как ассоциативный массив функций. Работать будет однозначно быстрее.

shoostr

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

Алексей Бардушко

var a = +prompt ('enter a number...','')
switch (a) {
case 1:
alert(1);
break;

case 2:
alert(2);
break;

case (3 || 4): <=========== что тут неправильного или не хватает? Можно ли вообще вместе с case использовать операторы сравнения? При вводе 3 - сообщение срабатывает, при вводе 4 - ничего не происходит так как default не определен
alert('3, 4');
break;
}

oneguy

Оператор || является не оператором сравнения, а логическим оператором, наверно вы имели ввиду именно его.
При case можно использовать операторы сравнения и логические операторы, но они работают не так, как вы думаете.
В данном случае вычисляется выражение 3 || 4, которое равно 3, и его значение сравнивается с раннее вычисленным значением выражения под switch, которое равно 4. Так как эти значения не равны, то этот case пропускается.

Hamelions

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

Бойко Евгений

Да, ладно!
var a = true;
var b = 2;
switch(a) {
case (b<3):
alert('Операция сравнения в case!');
break;
}

Стрелец А

Чем отличается +promrt от просто prompt.

Нимтар

Введённое пользователем в prompt будет читаться скриптом как строчка.
Введённое в +prompt скрипт воспримет как число.

Бойко Евгений

Оператор + преобразует значение prompt к числу.
Т.е. отмена ввода (например, Esc): prompt -> null, а +prompt -> 0
А введённое нечисло: +prompt -> NaN

Стрелец А

Спасибо.

"case null" не работает, null===0????? если a =+prompt ....

Бойко Евгений

Без паники!
+prompt никогда не возвращает null. Ловить case null бесполезно.

 



<== предыдущая лекция | следующая лекция ==>
Если его не прервать — оно пойдёт далее, при этом остальные проверки игнорируются. | Объявление


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.174 сек.