拦截类型错误

时间:2016-11-21 12:51:07

标签: javascript

有没有办法拦截类型错误并返回自己的值? 考虑场景: 我有自己的lib,如果undefined或null返回一些值

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而我想在本机js中执行它并且我不想传入属性来检入数组或分隔字符串或其他东西。到目前为止,我还没有办法做到这一点。

我看到了一些重新定义window.onerror()的例子,但想知道是否有优雅的方法可以动态防止类型错误。

1 个答案:

答案 0 :(得分:0)

使用ES6,您可以使用ES6Proxies来实现这一目标。 如果您只想将逻辑应用于少数几个objets,这将非常有用。

请注意,大多数浏览器都不支持ES6代理,但您可以尝试使用某些填充程序。

不幸的是,你无法在全球范围内处理它:

  • 抛出错误时调用window.onerror。如果抛出错误,则无法返回抛出错误的代码行并再次运行。
  • ES6代理有一些限制。我强烈建议您阅读:http://exploringjs.com/es6/ch_proxies.html

您可以为您的图书馆做的唯一选择是做这样的事情:

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