try-catch 用于捕获错误,从语义上理解,就是先尝试一下,不行就走另一条路,可以就走下去。

基本语法

执行时,先执行 try 代码块中,碰到报错后(实际上并不会报错),直接走 catch 代码块,try 代码块下边的其他代码不再执行。catch 会捕获错误信息,当作参数一样,在 catch 代码块中使用。

catch 中,可以通过 throw 手动抛出错误。

  1. try{
  2. // 若这里边(try的大括号)的代码执行报错,则直接走 catch中的代码
  3. console.log(1);
  4. console.log(b);// 碰见报错直接走catch;下边代码不再执行
  5. console.log(2);
  6. console.log(q);
  7. console.log(w);
  8. console.log(e);
  9. }catch (q) {
  10. console.log(q);
  11. //=>ReferenceError: b is not defined
  12. //=> at <anonymous>:4:15 这里的 q 就是捕获到的错误信息,这里就可以进行处理,而不会让浏览器抛出错误
  13. throw ('b is not defined'); //=> 可以手动抛出错误
  14. }

经常用于做兼容处理:先尝试新方法,不行再走旧方法

try{
  console.log('google')
}catch (e) {
  console.log("IE")
}

try-catch 语句中,可以再嵌套 try-catch 语句

try{

}catch (e) {
  try {

  }catch (e) {

  }
}

用法

  • try-catch 用于会报错的兼容写法,主要是兼容方法或者多条语句的直接执行,提高容错率

  • 逻辑或用于不会报错的兼容写法,主要是对象属性的获取和默认值的设置

  • 条件判断都可以实现,只是有时候没有逻辑或便利。因为方法不直接执行,也可以当做一个属性来测试,不会报错

try {
  window.getComputedStyle(ele);
} catch(e) {
  ele.currentStyle;
}

document.documnetElement || document.body

document.documentElement ? document.documnetElement : document.body

function fn(name) {
  name = name || 'aa';
}

if (window.getComputedStyle) {
  window.getComputedStyle(ele)
} else {
  ele.currentStyle;
}