一、方法封装及容错处理
/** * @desc (方法功能描述)类数组转数组 * @param arrLike (方法的参数) 参数的意义:类数组对象 类型:对象 * @returns {any[]} 返回值意义:返回值是什么,类型是什么 */// 写了这些注释是好习惯,但是如果功能变更了,要维护这些注释;function arrLikeToAry(arrLike) { // return [...arrLike] return Array.from(arrLike);}// 但是这么写有一个问题,Array.from 是 ES6 的新特性,只能在高版本的浏览器使用。如果在老旧浏览器中使用,就会报错;所以这个时候需要做容错(异常)处理;// try-catch 语句用于 js 的异常处理;因为 js 是单线程的一旦程序出现异常,后面的代码就不会执行了。所以我们使用 try-catch 语句捕获异常;try { // 可能会引发异常的代码 var divList = document.getElementsByClassName('box'); var arr = Array.from(divList);} catch (e) { // 上面的 try 中的代码报错后会执行这个代码块中的代码;如果 try 中的代码不报错,这里代码不会执行。e 是错误信息,这个错误信息里面包含了上面 try 的时候引发的异常;你拿到这个错误后可以选择在浏览器中抛出异常;(有一些做报错或者性能监控的时候需要回传给服务器) // console.log(e); // var arr = Array.from(divList); 如果在 catch 语句中报错,并且也没有其他容错处理,就会报错,并且后面的代码也不会再执行了}// console.log('1234');// 利用 try-catch 语句改造类数组转数组的方法,使这个方法兼容所有的浏览器// try-catch 语句增强代码的健壮性,但是开发效率就会相应降低;function arrLikeToAry(aryLike) { // 先尝试ES6语法 try { return Array.from(aryLike) } catch (e) { // 如果代码执行到 catch 语句了,说明 try 中的 Array.from 报错;所以需要兼容处理 var newArr = []; for (var i = 0; i < aryLike.length; i++) { newArr.push(aryLike[i]) } return newArr; }}var divs = document.getElementsByTagName('div');// console.log(divs);var ary = arrLikeToAry(divs);console.log(ary);
二、throw手动抛出错误
// 1. throw 关键字:用来手动抛出异常(错误),抛出异常后,后面的代码就不会执行(同步的操作);throw 后面无论写什么,都会当成错误抛出;// throw 'hello world';// alert('1111');// throw 123;// throw {name: '123'};// 2. 常见的内置错误类型:// 2.1 ReferenceError 引用错误,一般由于引用未声明的变量导致// throw new ReferenceError('引用错误');// 2.2 TypeError 类型错误,一般由于搞错类型(不是函数的变量或者值后面跟一个小括号)// throw new TypeError('你搞错类型了');// 2.3 SyntaxError 语法错误,一般因为语法写的不对;// throw new SyntaxError('你的语法真差啊');// 2.4 Error 普通错误// throw Error('这是普通错误'); // 可以不用 new// 结合try-catch根据不同的报错类型,采取不同的措施try { throw new SyntaxError('类型错误');} catch (e) { // 根据报错类型不同,采取不同的措施 if (e instanceof TypeError) { console.log(1); } else if (e instanceof SyntaxError) { console.log(2); }}