2015-10-05 8 views
0

Я очень новичок в JS, я работал с ним просто для удовольствия и потому, что у меня есть свободное время. Я написал код ниже сразу после чтения руководств в Интернете в течение нескольких минут, поэтому, пожалуйста, не обвиняйте меня.Любая конкретная причина, по которой этот переключатель возвращает неопределенный?

var doctype = document.type; 
var n = doctype.indexOf("}") + 1; 
var doctype2 = doctype.substring(n); 
switch (doctype2) { 
    case "doc_func_adm": 
     var newtype = "documento-admissao-funcionario"; 
     switch (document.properties["ext1:tipo_doc_func_adm"]) { 
      case "Contrato Experiência": 
       var newtype2 = "contrato-experiencia"; 
       break; 
      case "Prorrogação de Contrato": 
       var newtype2 = "prorrogacao-contrato"; 
       break; 
      case "Contrato: Prazo Indeterminado": 
       var newtype2 = "contrato-prazo-indeterminado"; 
       break; 
      case "Termo Bolsa Família": 
       var newtype2 = "termo-bolsa-familia"; 
       break; 
      case "Vale Transporte": 
       var newtype2 = "vale-transporte"; 
       break; 
      case "Ficha Registro": 
       var newtype2 = "ficha-registro"; 
       break; 
     } 
    break; 
} 
print(newtype + "-" + newtype2); 
print(doctype2); //check string result being tested 

Результаты консоли:

undefined-undefined 
doc_func_adm 

Пожалуйста, обратите внимание, что 'doctype2' имеет ту же строку, что и испытания выключателя. Как вы можете видеть, он возвращает только неопределенные значения, и я считаю, что мне не хватает чего-то очень простого, что я не вижу.

Спасибо за помощь. Приветствия.

+0

Можете ли вы console.log (doctype); ? также n и doctype 2 – FLX

+0

Используйте отладчик и просто выполните его ... –

+2

'newtype' и' newtype2' объявлены внутри области действия оператора switch и не существуют вне этой области. –

ответ

0

Первоначально я думал, что ваша проблема будет объем, но после прочтения комментариев на исходное сообщение от @JohnnyMopp и проверить эту ссылку на scope of javascript variables - Я бы сказал, что проблема здесь:

var doctype2 = doctype.substring(n); 

    switch (doctype2) { 
    case "doc_func_adm": 
     var newtype = "documento-admissao-funcionario"; 

Я не думаю, что doctype2 когда-либо сталкивается с случаем, когда это «doc_func_adm»;

Если этот случай произошел по крайней мере один раз, переменная newtype будет содержать «documento-admissao-funcionario» и не будет неопределенной.

+0

Я узнал, что было для первого переключателя, я просто не понимаю, почему именно это происходит. По какой-то причине, что я не знаю, объявленный doctype2, который является термином, тестируемым в функции switch, не рассматривается как строка. Я решил это с помощью: switch (String (doctype2)) {Источник: Случай переключателя как строка Моя проблема теперь является второй функцией переключения, так как даже при преобразовании строки она не работает должным образом. Это заставляет меня спросить гуру, можно ли использовать функцию переключателя внутри другого переключателя до того, как предыдущие разрываются. – augustus182l

+0

http://jsfiddle.net/y89qjb2h/ –

+0

@ augustus182l - http: // jsfiddle.net/y89qjb2h/хотя вложенные операторы switch работают, я бы предложил другой подход к решению этой проблемы. Возможно, разбивая его на функции: getNewType (input) '&' getNewType2 (input) '; –

Смежные вопросы