【问题标题】:Javascript Functionalized Exception Handling - keep getting uncaught type error - how to handle it?Javascript 功能化异常处理 - 不断收到未捕获的类型错误 - 如何处理?
【发布时间】:2020-12-15 15:17:41
【问题描述】:

我不认为我在这里尝试在网络浏览器中做不合理的事情。您将如何捕获总是返回的错误?

function tryCatch(try_this, str_default_value){
    try {
        var test_val = try_this;
        return test_val;
    } 
    catch (error) {
        return str_default_value;
    }
}

tryCatch(digitalData.category.blah, 'default value');

我已经看过 if else 逻辑检查事先但试图避免在父 ex) if digitalData !== undefined、if digitalData.category !== undefined 等上添加 if else 语句。

这是我希望对其进行错误处理的输出:

VM27088:1 Uncaught TypeError: Cannot read property 'blah' of undefined

有什么想法吗?

【问题讨论】:

  • FWIW,如果您正在寻找访问可能不存在的属性的解决方案,您可以使用可选链接:digitalData?.category.blah。
  • 回复@FelixKling 的观点,在您的情况下,您需要digitalData.category?.blah 或digitalData?.category?.blah,因为您遇到的问题是digitalData.category 是undefined。 (请注意,可选链是一个相当新的 JavaScript 功能。)
  • 如前所述,使用digitalData?.category?.blah ?? 'default value'。
  • 可选链非常适合我的情况,谢谢!

标签: javascript exception


【解决方案1】:

问题是错误发生在您致电tryCatch 之前。这段代码:

tryCatch(digitalData.category.blah, 'default value');

按顺序做这些事情:

  1. 获取digitalData的值
  2. 从#1的结果中获取category属性的值
  3. 从#2的结果中获取blah属性的值
  4. 获取'default value'的值
  5. 获取tryCatch的值
  6. 用#3 和#4 中的值调用#5 中的值

您的代码在 #3 处失败,因为 digitalData.category 导致值 undefined。

【讨论】:

  • 我明白了,我以为它只会先在函数内运行,而不是在函数外运行,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
相关资源
最近更新 更多