异常胜于返回码
class Num {setNum(num) {if (typeof num !== 'number') {return 'NOT A NUMBER';}if (num < 0) {return 'LESS THAN ZERO';}this.num = num;}}let num = new Num();let error = num.setNum(5);if (error !== 'LESS THAN ZERO' && error !== 'NOT A NUMBER') {console.log(num.num);}
这样写非常麻烦
- 要返回所有错误码
- 要检查所有错误码
引出异常胜于返回码
用抛出异常代替返回码 ```javascript class Num { setNum(num) {
} }if (typeof num !== 'number') {throw Error('NOT A NUMBER');}if (num < 0) {throw Error('LESS THAN ZERO');}this.num = num;
let num = new Num(); try { num.setNum(5); console.log(num.num); } catch (error) { console.log(error); }
通过将要远行的代码包装try块中,无需检查所有错误码。捕获错误而不用检查可能返回的所有错误代码。<a name="us7kL"></a># 别忘记处理捕获到的错误在catch块中直接打error打印出来而不作任何处理,这样做是没有任何意义。- 发现错误不应该忽视- 报告异常会让我们知道该错误,然后相应进行处理```javascripttry {num.setNum(5);console.log(num.num);} catch (error) {console.log(error);display(error); // 在UI界面有所显示reportToService(error); // 上报给服务器给予记录,以作后续处理}
同样对于Promise的异常也是同样地处理。
getData().then(data => {...}).catch(error => {console.log(error);display(error); // 在UI界面有所显示reportToService(error); // 上报给服务器给予记录,以作后续处理});
