2014-10-31 75 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