警报返回未定义的(js)

时间:2020-08-24 15:15:21

标签: javascript try-catch

我正在学习js中的错误,并且提出了以下代码:

function StartGame() {
  try {
   if (input.value == "") {throw alert("Complete blanks"); return false}
   if (!input.value.match(/^[A-Za-z]+$/)) {throw alert("Only letters allowed"); return false}
   if (input.value.length < 3) {throw alert("Must have at least 3 characters"); return false}}
   catch(errorAlert) {alert(errorAlert)}
  inputPanel.style.display = "none"

  ... //some code 
 }

let inputPanel = document.querySelector("#form")
let input = document.querySelector("#input") 

<form id="form" title="Write your name"> <label> Enter your username: </label>
   <input id="input" type="text" maxlength="10" autofocus>
   <button type="button" onclick="StartGame()" id="begin-game"> Submit </button>
  </form>

但是,当引发throw事件(因此,如果未正确提交输入)时,首先出现警报(这是正常的) BUT ,然后出现另一个警报,提示“未定义”并返回其余代码为true(其余代码运行)。相反,我希望在未正确验证输入的情况下,没有未定义的警报,并且它返回false。有什么帮助吗?谢谢

2 个答案:

答案 0 :(得分:1)

您需要引发该消息,然后在catch块内对其发出警报。将函数放在throw语句中时,将执行该函数并抛出返回值。

try{
    // Do something that throws a message
    throw "Something messed up!";
}catch(message){
    // Alert the message here
    alert(message);
}

但是,最好是抛出一个Error对象,因为它包含用于调试目的的有用信息。

try{
    // do something that throws an error
    throw new Error("Something screwed up!");
}catch(e){
    // alert the message here
    alert(e.message);
    // The error object also has other features 
    // that make it helpful for debugging, like the stack trace
    console.log(e.stack);
}

答案 1 :(得分:0)

这是因为您的throw关键字。引用MDN:

throw语句引发用户定义的异常。执行 当前函数将停止(抛出后的语句将不会 执行),并将控制权传递给 调用堆栈。如果调用者函数之间不存在catch块,则 程序将终止。

您可以详细了解here

也正如其他用户指出的那样,您应该抛出一个错误而不是一个警报