有没有办法拦截类型错误并返回自己的值? 考虑场景: 我有自己的库,在未定义或 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,我想在 native js 中执行此操作,并且我不想传入属性来检查数组或分隔字符串或其他内容。到目前为止我还没有找到办法。
我看到了一些重新定义 window.onerror() 的示例,但想知道是否有一种优雅的方法来动态防止类型错误。
最佳答案
使用 ES6,您可以使用 ES6Proxies为了实现这一点。 如果您只想将逻辑应用于少数对象,这尤其有用。
请注意,大多数浏览器不支持 ES6 代理,但您可以尝试一些垫片。
不幸的是,您无法在全局范围内处理它,因为:
- window.onerror 在抛出错误时被调用。如果抛出错误,您无法返回到抛出错误的代码行并再次运行。
- ES6 Proxy 有一些限制。我强烈建议阅读:http://exploringjs.com/es6/ch_proxies.html
您可以为您的库做的唯一选择就是执行以下操作:
Option.getProperty(object, 'a.b.c.d') // returns Nothing or Just instance
关于javascript - 拦截类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40720653/