JavaScript 异常处理未按预期工作
JavaScript Exception handling not working as expected
这是我第一次使用 JavaScript 异常和异常处理。
好的,我有以下简单的代码。
function getMonth( month ) {
month = month -1;
var months = [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
];
if( month != null ) {
if( months.indexOf( month ) ) {
return months[month];
} else {
throw "Invalid number for month";
}
} else {
throw "No month provided";
}
}
基本上,它首先检查是否向函数提供了参数,如果没有,则抛出和异常。其次,它会检查提供的数字是否与有效的月份数字匹配,如果没有引发异常。
我按如下方式运行它:
try {
month = getMonth();
} catch( e ) {
console.log( e );
}
控制台不会记录异常"未提供月份"。这是为什么呢?我目前正在阅读有关例外的信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Control_flow_and_error_handling#Exception_Handling_Statements
棘手的问题。这里的问题是:您的代码实际上永远不会到达throw
语句,而是运行并正常返回。原因有点"JavaScriptish":
在调用函数时,引入了变量month
(因为它在参数中),但到目前为止,它的值是 undefined
。然后month -1;
语句与返回Illegal Number
或NaN
的语句相同undefined - 1
。(如果它真的扔了会更好,我同意)。
您的第一个if(month != null)
现在解析为true
month = NaN
和NaN != null
。第二个条件返回 true,因为如果给定的值不在数组中Array.indexOf
则实际上返回-1
。-1
是一个有效值,因此解析为 true
。
我再次同意 - 这有点违反直觉。但是,嘿 - 欢迎来到JavaScript。它有好的一面,我保证;)
小提示:尝试我在浏览器控制台中发布的所有条件和语句,然后您将更好地理解它。
这是因为月份变量是undefined
的,它不等于null
。
try {
month = getMonth();
alert(month);
} catch( e ) {
alert(e);
}
function getMonth( month ) {
month = month -1;
var months = [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
];
if( month != null ) {
if( months.indexOf( month ) ) {
return months[month];
} else {
throw "Invalid number for month";
}
} else {
throw "No month provided";
}
}
有关更多信息,请阅读本文
- node.js和express中的异常处理
- 派生进程的stdout在管道传输时工作异常
- JSON.stringify没有'在更改的对象上无法按预期工作.如何处理
- JavaScript 异常处理未按预期工作
- tomcat服务器停止时UI上的异常处理
- 带异常处理的基数转换
- Javascript getJson异常处理
- 使用生成器进行异常处理
- 如何在保留 JavaScript 调试器功能的同时进行优雅的异常处理
- 了解 JavaScript 中的异常处理:当更改 try/catch 块的位置时,获得不同的输出
- 流星中的异常处理
- 角.如何在视图中显示异常处理程序的错误
- 如何使工作 Chrome 扩展程序的未捕获异常处理程序(由于 CORS 保护而不起作用)
- jQuery-RegEx工作异常
- Selenium2/WebdriverJavaScript异常处理:错误消息大部分时间为空(Javaneneneba A
- 一些javascript代码不工作-事件处理程序'onclick'中的if()语句
- 使用bluebird promise进行异步异常处理
- CORS重定向工作异常
- Vert-x 3.3.2 HTTP客户端异常处理程序
- Node.js最佳实践异常处理-异步/Await之后