javascript - 拦截类型错误

标签 javascript

有没有办法拦截类型错误并返回自己的值? 考虑场景: 我有自己的库,在未定义或 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/

相关文章:

javascript - 如何处理动态内容的点击事件?

javascript - 如果未添加 "window",则检查 "window."中是否存在属性会失败

javascript - es6 Map 和 Set 复杂度,v8 实现

javascript - Sweetalert AJAX 失败

javascript - 使用 jquery 根据点击显示/隐藏与类相关的文本

javascript - 在 Javascript 中解析 Youtube API 日期

javascript - 当只有一个类可供选择时,为什么 getElementsByClassName 需要 [0] 才能工作?

javascript - typescript :未定义的静态变量问题

javascript - 如何计算小时到分钟?

javascript - 在javascript中使用JSZIP提取压缩文件