V8 与 SpiderMonkey 的 catch(e if e..) 的等价

发布于 2024-10-11 04:42:57 字数 740 浏览 3 评论 0原文

使用 SpiderMonkey,您可以利用条件 catch 块将异常路由到适当的处理程序。

try {
// function could throw three exceptions
getCustInfo("Lee", 1234, "[email protected]")
}
catch (e if e == "InvalidNameException") {
// call handler for invalid names
bad_name_handler(e)
}
catch (e if e == "InvalidIdException") {
// call handler for invalid ids
bad_id_handler(e)
}
catch (e if e == "InvalidEmailException") {
// call handler for invalid email addresses
bad_email_handler(e)
}
catch (e){
// don't know what to do, but log it
logError(e)
}

来自 MDN 的示例

但是,在 V8 中,此代码无法编译,任何建议或除显而易见的解决方案之外的解决方案都无法编译。

Using SpiderMonkey you can utilize conditional catch blocks to route exceptions to the appropriate handler.

try {
// function could throw three exceptions
getCustInfo("Lee", 1234, "[email protected]")
}
catch (e if e == "InvalidNameException") {
// call handler for invalid names
bad_name_handler(e)
}
catch (e if e == "InvalidIdException") {
// call handler for invalid ids
bad_id_handler(e)
}
catch (e if e == "InvalidEmailException") {
// call handler for invalid email addresses
bad_email_handler(e)
}
catch (e){
// don't know what to do, but log it
logError(e)
}

example from MDN

However in V8 this code wont compile, any suggestions, or work arounds other than the obvious.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ぃ双果 2024-10-18 04:42:57

据我所知,其他 JavaScript 引擎没有类似的功能。

但是使用此功能很容易将代码转换

try {
    A
} catch (e if B) {
    C
}

为仅使用所有 JavaScript 引擎支持的标准功能的代码:

try {
    A
} catch (e) {
    if (B) {
        C
    } else {
        throw e;
    }
}

您给出的示例更容易翻译:

try {
    getCustInfo("Lee", 1234, "[email protected]");
} catch (e) {
    if (e == "InvalidNameException") {
        bad_name_handler(e);
    } else if (e == "InvalidIdException") {
        bad_id_handler(e);
    } else if (e == "InvalidEmailException") {
        bad_email_handler(e);
    } else {
        logError(e);
    }
}

There's no similar feature in the other JavaScript engines as far as I know.

But it is easy to convert code using this feature:

try {
    A
} catch (e if B) {
    C
}

into code that just uses standard features that all the JavaScript engines support:

try {
    A
} catch (e) {
    if (B) {
        C
    } else {
        throw e;
    }
}

The example you gave is even easier to translate:

try {
    getCustInfo("Lee", 1234, "[email protected]");
} catch (e) {
    if (e == "InvalidNameException") {
        bad_name_handler(e);
    } else if (e == "InvalidIdException") {
        bad_id_handler(e);
    } else if (e == "InvalidEmailException") {
        bad_email_handler(e);
    } else {
        logError(e);
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文