为了练习,我正在编写一个JavaScript库,并且正在对现有对象(如Array)上的代码进行建模。JavaScript原生方法默默地失败,而不是抛出错误
我注意到的是像array.pop
(当数组为空时)和array.splice(-1, -1)
的方法失败而不是抛出错误。为什么这样?调试的目的不是更好的抛出一个错误吗?还是有一些我不知道的JavaScript最佳实践?
为了练习,我正在编写一个JavaScript库,并且正在对现有对象(如Array)上的代码进行建模。JavaScript原生方法默默地失败,而不是抛出错误
我注意到的是像array.pop
(当数组为空时)和array.splice(-1, -1)
的方法失败而不是抛出错误。为什么这样?调试的目的不是更好的抛出一个错误吗?还是有一些我不知道的JavaScript最佳实践?
array.pop对一个空数组将返回类型:undefined。如果您尝试使用结果,它会引发错误。
array.splice将始终返回一个数组。如果没有被删除,它将返回一个空数组。
为了确保方法是这样正在返回预期值,你应该写单元测试。
一个简单的例子:
if(!myarray.pop()){
console.log('Error');
}
对于更详细的单元测试我会用一个js单元测试库。一个我用的QUnit.js http://qunitjs.com/
这很有道理。但是其他一些默默无闻而不是抛出错误的方法呢?我想我要问的是,是否有任何指导方针来决定何时抛出和什么时候默默地失败? – chenglou 2013-03-02 18:35:18
@flsg取决于你想要达到的目标。 JS本质上有点宽容,如果你看看流行的库,比如jQuery,那么调用空对象的方法也会失败。无论你是默默地失败还是抛出错误取决于你的意图,都应该被记录下来。 – 2013-03-02 18:36:53
感谢您的回复。任何想法为什么它是宽容的?这是一个有意识的设计选择吗?即jQuery有什么好处可以默默地失败? – chenglou 2013-03-02 20:09:06
,您在为Javascript来什么语言? – 2013-03-02 18:10:13
至少用'.pop()'你现在可以用while来做循环while(x = array.pop()){...}' – JJJ 2013-03-02 18:11:57