2015-12-09 3 views
2

Я пытаюсь написать функцию, которая вычисляет, сколько дней прошло и, в зависимости от значения, обновляет переменную и предупреждает эту строку.Оператор switch, никакой случай не выполнен

Я продолжаю получать «неопределенные». Правильно ли указано мое заявление о переключении?

var d = new Date(); 
 
var o = new Date(2015, 12, 7); 
 
var todayDate = d.getDate(); 
 
var startDate = o.getDate(); 
 
var twelveDays = todayDate - startDate; 
 

 
switch (twelveDays) { 
 
    case "0": 
 
    var calories = '10'; 
 
    break; 
 
    case "1": 
 
    var calories = '20'; 
 
    break; 
 
    case "2": 
 
    var calories = '30'; 
 
    break; 
 
    case "3": 
 
    var calories = '40'; 
 
    break; 
 
    case "4": 
 
    var calories = '50'; 
 
    break; 
 
    case "5": 
 
    var calories = '60'; 
 
    break; 
 
    case "6": 
 
    var calories = '70'; 
 
    break; 
 
    case "7": 
 
    var calories = '80'; 
 
    break; 
 
    case "8": 
 
    var calories = '90'; 
 
    break; 
 
    case "9": 
 
    var calories = '100'; 
 
    break; 
 
    case "10": 
 
    var calories = '110'; 
 
    break; 
 
    case "11": 
 
    var calories = '120'; 
 
    break; 
 
    case "12": 
 
    var calories = '130'; 
 
    break; 
 
} 
 

 
alert(calories);

View on JSFiddle

+3

Появляется, что 'twelveDays' является числом (' 2') - и не вводит приведение для '' 2 "' - если вы делаете «twelveDays» в качестве строки, он работает: «var twelveDays =» " + (todayDate - startDate); ' – tymeJV

+0

. Случаи должны быть как указано в @tymeJV, числовые или строковые. Как примечание, для этого нужен переключатель? ** Похоже, что это может быть упрощено var calories = (двенадцать дней * 10) + 10; ** – smcd

+1

Вам повезло, что вам нужно рассчитать только на 12 дней. Представьте себе, что будет выглядеть эта функция, если она должна работать на протяжении всего 20-го века! (подсказка: когда код так повторяется, обычно есть лучший способ) – zvone

ответ

3

twelveDays представляет собой целое число. В вашем операторе switch вы проверяете строку. Не существует предложения по умолчанию, поэтому он выдает ошибку undefined.

Изменить его следующим образом:

switch (twelveDays) { 
    case 0: 
    var calories = '10'; 
    break; 
case 1: 
    var calories = '20'; 
    break; 
case 2: 
    var calories = '30'; 
    break; 
} 

Кроме того, это хорошая практика, чтобы добавить пункт по умолчанию только в том случае

0

Я только что обновил свой jsfiddle. http://jsfiddle.net/x28a1Lhc/2/

Когда вы используете switch, это хорошая вещь, чтобы добавить случай по умолчанию.

var twelveDays = todayDate - startDate; возвращает целое число.

Вам нужны случаи в переключателе для соответствия целому числу.