2014-10-31 88 views
0

无论我做什么,我的代码都不会报告任何错误。这是一个索引数组,当我提示用户输入他们想要删除的列表号时,我得到一个错误。它应该给我一个错误,如果它不在索引或不是一个整数。Javascript try and catch

function deleteTask(){ 
    'use strict'; 
    //Prompt user 
    var input = prompt("what task do you want to delete?"); 

    var delMessage = ' '; 

    try { 
     //Convert to integer 
     var delTask = parseInt(input); 
     //Validates that user input was number and is range of to do list 
     if ((typeof delTask == 'number') && (delTask <= tasks.length)){ 
      if (delTask > 1){ 
       //removes element from array 
       var oneDown = parseInt(delTask - 1); 
       tasks.splice(oneDown, 1); 
      }else{ 
       tasks.splice(0,1); 
      } 

      delMessage = '<h2>To-Do</h2><ol>'; 
      for (var i = 0, count = tasks.length; i < count; i++) { 
       delMessage += '<li>' + tasks[i] + '</li>'; 
      } 
      delMessage += '</ol>'; 
      output.innerHTML = delMessage; 
     } 
     //Return false to prevent submission: 
     return false; 

    }catch(ex){ 
     console.log(ex.message); 
    } 



} 

回答

1

简单,下面的代码添加到try块的开始 if((input -parseInt(input))!=0) throw new Error('not integer');

它应该做的伎俩。

+0

我必须抛出错误?它不应该自行旅行?根据我的理解,我认为如果在任何try代码中存在逻辑错误或某种情况,它会将错误发送给catch。我错了吗? – EsotericRider 2014-10-31 02:38:44

+0

不要以为JS会捕获逻辑错误... – mido 2014-10-31 02:48:58

+0

好吧我想通了,谢谢! – EsotericRider 2014-10-31 02:49:09

0

我改变你的函数,请看看是不是你想要的东西:

var tasks = [1,2,3,4,5,6,7,8,9,10]; 

function deleteTask(){ 
    'use strict'; 
    //Prompt user 
    var input = prompt("what task do you want to delete?"); 
    var delMessage = ' '; 

    //Convert to integer 
    var delTask = parseInt(input); 

    //Validates that user input was number and is range of to do list 
    if ((typeof delTask == 'number') && (delTask <= tasks.length)){ 
     if (delTask > 1){ 
      //removes element from array 
      var oneDown = parseInt(delTask - 1); 
      tasks.splice(oneDown, 1); 
     }else if (delTask == 0){ 
      tasks.splice(0,1); 
     } 

     delMessage = '<h2>To-Do</h2><ol>'; 
     for (var i = 0, count = tasks.length; i < count; i++) { 
      delMessage += '<li>' + tasks[i] + '</li>'; 
     } 
     delMessage += '</ol>'; 
     document.getElementById('output').innerHTML = delMessage; 
    } else { 
     throw "The value is not number or not index of array! Try again!"; 
    } 
    //Return false to prevent submission: 
    return false; 
} 

try { 
    deleteTask(); 
} catch (e) { 
    console.log(e); 
} 
+0

语法是关闭的,但带有throw的else语句是我最终修复它的方式。谢谢! – EsotericRider 2014-10-31 02:53:00