【问题标题】:What is the function return when throwing an error - Javascript抛出错误时的函数返回是什么 - Javascript
【发布时间】:2017-07-11 17:00:48
【问题描述】:

我正在阅读《面向 Web 开发人员的专业 Javascript》一书,并看到了以下代码。我对此有一些疑问:

  1. “throw new Error()”返回什么?不明确的?
  2. 如果抛出错误,“if”的代码块会发生什么?

function matchesSelector(element, selector){

  if(element.matchesSelector){
      return element.matchesSelector(selector);
  }else if(element.msMatchesSelector){
      return element.msMatchesSelector(selector);
  }else if(element.mozMatchesSelector){
      return element.mozMatchesSelector(selector);
  }else if(element.webkitMatchesSelector){
      return element.webkitMatchesSelector(selector);
  }else{
    throw new Error("Not supported!");
  }
}


if(matchesSelector(document.body, "body.page1")){
  //do somthing
}

【问题讨论】:

  • }其他?需要一个打开的 {?
  • 感谢提醒。我刚刚添加了它。 @ÁlvaroTouzón

标签: javascript return throw


【解决方案1】:

当抛出错误时,如果没有使用try...catch 块捕获,则作用域执行将停止。

该函数不返回任何内容,如果该函数的返回值在 if 语句中的某处使用,则该 if 语句块也不会执行。

【讨论】:

    【解决方案2】:

    这个特殊的代码块试图创建一个通用的、跨平台的选择器。如果您遇到错误,那么您使用的任何浏览器都不支持任何给定的选择器匹配项(并且可能被认为是边缘浏览器,由“可接受的少数”用户使用)。它将失败,并且可能会在控制台中返回错误消息。但它很可能会默默地死去。

    通过扩展,当最终的 if() 运行时,它也会默默地死去......

    【讨论】:

    • 谢谢。还有一个问题:如果 if() 无声无息地死掉,剩下的代码会被执行吗?
    • 如果使用 try/catch 从未捕获到错误,代码将尝试继续,但它可能会给您带来意想不到的错误——例如,如果您尝试对返回的数据采取行动,它将返回错误消息。如果您在同一个 if 语句中处理其他数据,那将可以正常工作。
    • 我明白了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 2021-02-28
    • 2021-05-09
    相关资源
    最近更新 更多