爲了練習,我正在編寫一個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