2013-03-02 62 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

相關問題