如题。 比如 在检测浏览器是否支持某些功能的时候
if (!xx) {
console.error('此浏览器不支持 xx 功能')
}
还是
try {
xx;
}
catch(e) {
throw new Error('此浏览器不支持 xx 功能');
}
上面这个列子可能并不恰当,只是抛出问题,希望大神可以全面的指点下。
如题。 比如 在检测浏览器是否支持某些功能的时候
if (!xx) {
console.error('此浏览器不支持 xx 功能')
}
还是
try {
xx;
}
catch(e) {
throw new Error('此浏览器不支持 xx 功能');
}
上面这个列子可能并不恰当,只是抛出问题,希望大神可以全面的指点下。
总结一下为什么大家可能不太用try catch以及什么时候用try catch比较好:
一,现实层面
因为javascript总是被别人当做玩具语言,很丑的脚本语言,甚至都不被认为是真正的语言,所以大家甚至都没有想到可能有需要try catch的时候。
因为javascript是浏览器唯一广泛支持的语言,用的人非常多,这样的话就有很多就会不专业的人写的大量糟糕的代码
二,语言层面
脚本语言有很好地容错性,像类型转换等,所以很多情况下其他语言出现的错误在javascript中根本不报错
异步的情况下,try catch可能并不管用。比如下面的代码
javascript
try {
setTimeout(function() {
do_something_that_throws();
}, 1000);
}
catch (e) {
alert("You won't see this!");
}
因为是异步的,代码运行会跳过try中throw错误的代码,所以就无法捕获错误。
使用try catch会导致性能问题(重新思考javascript中的try catch)
在nodejs中错误会被传递给回调函数,比如:
fs.readFile(uri, function (err, fileData) {
if (err) {
// handle
// A. give the error to someone else
return callback(err)
// B. recover logic
return recoverElegantly(err)
// C. Crash and burn
throw err
}
// success case, handle nicely
})
try catch一般用来捕获宿主对象或者ECMAScript抛出的异常。
var json
try {
json = JSON.parse(input)
} catch (e) {
// invalid json input, set to null
json = null
}
参考链接:
在Java中,如果一段代码可能Throw Exception,那么它的外面就需要包裹try catch。
Js中类似,如果一段代码是第三方的,且会throw exception,最好try一下。判断的方法,可以用dev tool的Exception断点来调试。
主要看你的JS是用来干啥。
如果是负责显示的话 那么JS 要看一下能兼容多少种浏览器。 分别对应写,实在不行就直接丢到一个没啥特校的页面显示说 不支持你的浏览器 BlaBla。。
如果是负责AJAX加载和处理数据。。如果不能兼容的话 就只能直接跳了。。。。
不过一般来说都是负责某些特校不行。。。 一般是用替代品或者跳到错误页 。
替代品可以是 flash ,图片 等等。。
8 回答4.1k 阅读✓ 已解决
6 回答2.5k 阅读✓ 已解决
5 回答2.3k 阅读✓ 已解决
5 回答5.9k 阅读✓ 已解决
4 回答2k 阅读✓ 已解决
3 回答2.1k 阅读
4 回答2.6k 阅读✓ 已解决
jquery 让 dom 操作不报错,结果现在很多前端以为 try catch 都用不着了。
https://github.com/inexorabletash/polyfill/blob/master/es5.js
这里有个例子,通过try catch 监测浏览器是否实现某个功能是个好习惯,如果不支持,有时候可以采用降级处理。
那些不处理的异常的,估计也就写写网页吧,一个严肃的应用出现js报错是非常影响用户体验的事情!
如果你无法降级处理,做法也不应该是直接抛出异常,好的体验应该是告诉用户你的应用部分功能不支持他现在的浏览器,提示他更换,抛错会让用户无所适从。
如果是你是开发组件给别人用,最好提前在说明中声明使用了哪些新特性