2016-11-21 181 views
1

有沒有辦法攔截類型錯誤並返回自己的值? 考慮的情景: 我有我自己的lib,在中未定義或爲空的情況下返回一定的價值攔截類型錯誤

if (typeof value === 'undefined' || value === null) return Nothing; 

因此,如果您使用此

mylib(null) // -> Nothing 
mylib(1) // -> Just(1) 

這是所有好的,但如果我通過在物體像這樣的不存在的財產

var a = {}; 
a.b = {}; 
mylib(a.b.c.d) // -> c is not an Object and does not have property d 
// Uncaught TypeError: Cannot read property 'd' of undefined 

所以我想要的是攔截類型錯誤並返回Nothing,而我想在native JS和我不想傳入屬性來檢查數組或分隔字符串或其他東西。到目前爲止,我沒有找到辦法做到這一點。

我看到了一些重新定義window.onerror()的例子,但是想知道是否有一種優雅的方式來動態地防止類型錯誤。

+0

你爲什麼要這麼做?如果它會爲所有事情返回相同的錯誤,則無法進行調試。 – putvande

+0

不,我只想要調用mylib() – vodich

+2

這個錯誤發生在調用mylib()之前。那麼你將如何攔截它? :) –

回答

0

有了ES6,您可以使用ES6Proxies來實現這一點。 如果您只想將邏輯應用於少數對象,那麼這非常有用。

請注意,大多數瀏覽器不支持ES6代理,但您可以嘗試一些墊片。

可惜的是你不能在全球範圍處理它,因爲:當發生錯誤時

你能爲你做圖書館的唯一的選擇就是做這樣的事情:

Option.getProperty(object, 'a.b.c.d') // returns Nothing or Just instance 
+0

是的,這似乎是我想要做的事情。只需要嘗試使用它,直到所有瀏覽器都支持它。謝謝! – vodich

+0

請不要忘記將帖子標記爲「分辨率」 – wookieb