2016-11-21 176 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