似乎其他支持Try/Catch的编程语言中,开发者比在JavaScript中更频繁地使用该功能。这是为什么呢?JS中的Try/Catch实现存在缺陷吗?
似乎其他支持Try/Catch的编程语言中,开发者比在JavaScript中更频繁地使用该功能。这是为什么呢?JS中的Try/Catch实现存在缺陷吗?
try{}catch(e){}
更容易和清晰。var container = document.getElementById("timmy");
container.innerHTML = "I'm timmy!";
如果没有ID为"timmy"的元素,我们可以这样处理:
try
{
container.innerHTML = "I'm timmy";
}
catch (error)
{
//handle no container
}
或者:
if(container) container.innerHTML = "I'm timmy";
else //handle no container
还有一件需要记住的事情是JavaScript应用程序是事件驱动的,而在程序主体中的try/catch块无法捕获发生在事件回调中的错误。
例如:
sqlConnection.query("SELECT * FROM table",
function(){console.log("queried!");});
这将触发一些本地代码,随着你的程序继续运行。如果发生错误,你不能期望你的程序返回到这一行,以便你的错误处理程序可以处理这个错误!相反,你在回调函数中处理错误。常见的做法是通过将其作为第一个参数传递来向回调函数提供任何发生的错误。
sqlConnection.query("SELECT * FROM table",
function(error, data){
if(error) console.log("query failed");
else console.log("queried!");
});
或者,如果你的代码在回调中失败了,你可以按照我上面提到的方式处理它。
link.onclick = function(e)
{
var popUp = document.getElementById("popup");
if(!popUp)
return true; //follow link if no pop-up exists
popUp.style.display = "block";
};
我认为相较于 if 语句,try/catch 会有更多的开销,但只有当真正抛出异常时才会有影响。我经常使用 try/catch,但仅当我知道可能会抛出异常时。
如果使用得当,实际上没有理由不使用 try/catch。
JavaScript并不需要它们,原因是几乎没有必要捕获错误,因为一个错误并不会停止整个脚本。 Javascript是事件驱动的,大多数函数在特定事件发生时运行,并且它是客户端的,所以如果出了问题,就出了问题,捕获和处理错误几乎没有什么好处。 这只是我的看法。
try
,如果你能在它失败之前检测到它将会失败的话。 - gen_Eric