一、方法封装及容错处理

  1. /**
  2. * @desc (方法功能描述)类数组转数组
  3. * @param arrLike (方法的参数) 参数的意义:类数组对象 类型:对象
  4. * @returns {any[]} 返回值意义:返回值是什么,类型是什么
  5. */
  6. // 写了这些注释是好习惯,但是如果功能变更了,要维护这些注释;
  7. function arrLikeToAry(arrLike) {
  8. // return [...arrLike]
  9. return Array.from(arrLike);
  10. }
  11. // 但是这么写有一个问题,Array.from 是 ES6 的新特性,只能在高版本的浏览器使用。如果在老旧浏览器中使用,就会报错;所以这个时候需要做容错(异常)处理;
  12. // try-catch 语句用于 js 的异常处理;因为 js 是单线程的一旦程序出现异常,后面的代码就不会执行了。所以我们使用 try-catch 语句捕获异常;
  13. try {
  14. // 可能会引发异常的代码
  15. var divList = document.getElementsByClassName('box');
  16. var arr = Array.from(divList);
  17. } catch (e) {
  18. // 上面的 try 中的代码报错后会执行这个代码块中的代码;如果 try 中的代码不报错,这里代码不会执行。e 是错误信息,这个错误信息里面包含了上面 try 的时候引发的异常;你拿到这个错误后可以选择在浏览器中抛出异常;(有一些做报错或者性能监控的时候需要回传给服务器)
  19. // console.log(e);
  20. // var arr = Array.from(divList); 如果在 catch 语句中报错,并且也没有其他容错处理,就会报错,并且后面的代码也不会再执行了
  21. }
  22. // console.log('1234');
  23. // 利用 try-catch 语句改造类数组转数组的方法,使这个方法兼容所有的浏览器
  24. // try-catch 语句增强代码的健壮性,但是开发效率就会相应降低;
  25. function arrLikeToAry(aryLike) {
  26. // 先尝试ES6语法
  27. try {
  28. return Array.from(aryLike)
  29. } catch (e) {
  30. // 如果代码执行到 catch 语句了,说明 try 中的 Array.from 报错;所以需要兼容处理
  31. var newArr = [];
  32. for (var i = 0; i < aryLike.length; i++) {
  33. newArr.push(aryLike[i])
  34. }
  35. return newArr;
  36. }
  37. }
  38. var divs = document.getElementsByTagName('div');
  39. // console.log(divs);
  40. var ary = arrLikeToAry(divs);
  41. console.log(ary);

二、throw手动抛出错误

  1. // 1. throw 关键字:用来手动抛出异常(错误),抛出异常后,后面的代码就不会执行(同步的操作);throw 后面无论写什么,都会当成错误抛出;
  2. // throw 'hello world';
  3. // alert('1111');
  4. // throw 123;
  5. // throw {name: '123'};
  6. // 2. 常见的内置错误类型:
  7. // 2.1 ReferenceError 引用错误,一般由于引用未声明的变量导致
  8. // throw new ReferenceError('引用错误');
  9. // 2.2 TypeError 类型错误,一般由于搞错类型(不是函数的变量或者值后面跟一个小括号)
  10. // throw new TypeError('你搞错类型了');
  11. // 2.3 SyntaxError 语法错误,一般因为语法写的不对;
  12. // throw new SyntaxError('你的语法真差啊');
  13. // 2.4 Error 普通错误
  14. // throw Error('这是普通错误'); // 可以不用 new
  15. // 结合try-catch根据不同的报错类型,采取不同的措施
  16. try {
  17. throw new SyntaxError('类型错误');
  18. } catch (e) {
  19. // 根据报错类型不同,采取不同的措施
  20. if (e instanceof TypeError) {
  21. console.log(1);
  22. } else if (e instanceof SyntaxError) {
  23. console.log(2);
  24. }
  25. }