2013-03-02 58 views
1

为了练习,我正在编写一个JavaScript库,并且正在对现有对象(如Array)上的代码进行建模。JavaScript原生方法默默地失败,而不是抛出错误

我注意到的是像array.pop(当数组为空时)和array.splice(-1, -1)的方法失败而不是抛出错误。为什么这样?调试的目的不是更好的抛出一个错误吗?还是有一些我不知道的JavaScript最佳实践?

+0

,您在为Javascript来什么语言? – 2013-03-02 18:10:13

+0

至少用'.pop()'你现在可以用while来做循环while(x = array.pop()){...}' – JJJ 2013-03-02 18:11:57

回答

2

array.pop对一个空数组将返回类型:undefined。如果您尝试使用结果,它会引发错误。

array.splice将始终返回一个数组。如果没有被删除,它将返回一个空数组。

为了确保方法是这样正在返回预期值,你应该写单元测试。

一个简单的例子:

if(!myarray.pop()){ 
    console.log('Error'); 
} 

对于更详细的单元测试我会用一个js单元测试库。一个我用的QUnit.js http://qunitjs.com/

+0

这很有道理。但是其他一些默默无闻而不是抛出错误的方法呢?我想我要问的是,是否有任何指导方针来决定何时抛出和什么时候默默地失败? – chenglou 2013-03-02 18:35:18

+1

@flsg取决于你想要达到的目标。 JS本质上有点宽容,如果你看看流行的库,比如jQuery,那么调用空对象的方法也会失败。无论你是默默地失败还是抛出错误取决于你的意图,都应该被记录下来。 – 2013-03-02 18:36:53

+0

感谢您的回复。任何想法为什么它是宽容的?这是一个有意识的设计选择吗?即jQuery有什么好处可以默默地失败? – chenglou 2013-03-02 20:09:06

相关问题