我正在学习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。有什么帮助吗?谢谢
答案 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。
也正如其他用户指出的那样,您应该抛出一个错误而不是一个警报