mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-06-09 15:34:05 +08:00
375 lines
27 KiB
HTML
375 lines
27 KiB
HTML
<article id="wikiArticle">
|
||
<div></div>
|
||
<p> <strong><code>try...catch</code></strong>语句将能引发错误的代码放在try块中,并且对应一个响应,然后有异常被抛出。</p>
|
||
<h2 id="语法">语法</h2>
|
||
<pre><code class="language-javascript">try {
|
||
<em>try_statements</em>
|
||
}
|
||
[catch (<em>exception_var_1</em> if <em>condition_1</em>) { // non-standard
|
||
<em>catch_statements_1</em>
|
||
}]
|
||
...
|
||
[catch (<em>exception_var_2</em>) {
|
||
<em>catch_statements_2</em>
|
||
}]
|
||
[finally {
|
||
<em>finally_statements</em>
|
||
}]
|
||
</code></pre>
|
||
<dl>
|
||
<dt><code>try_statements</code></dt>
|
||
<dd>需要被执行的语句。</dd>
|
||
</dl>
|
||
<dl>
|
||
<dt><code>catch_statements_1</code>, <code>catch_statements_2</code></dt>
|
||
<dd>如果在<code>try</code>块里有异常被抛出时执行的语句。</dd>
|
||
</dl>
|
||
<dl>
|
||
<dt><code>exception_var_1</code>, <code>exception_var_2</code></dt>
|
||
<dd>用于保存关联<code>catch</code>子句的异常对象的标识符。</dd>
|
||
</dl>
|
||
<dl>
|
||
<dt><code>condition_1</code></dt>
|
||
<dd>一个条件表达式。</dd>
|
||
</dl>
|
||
<dl>
|
||
<dt><code>finally_statements</code></dt>
|
||
<dd>在<code>try</code>语句块之后执行的语句块。无论是否有异常抛出或捕获这些语句都将执行。</dd>
|
||
</dl>
|
||
<h2 id="描述">描述</h2>
|
||
<p><code>try</code>语句包含了由一个或者多个语句组成的<code>try</code>块, 和至少一个<code>catch</code>子句或者一个<code>finally</code>子句的其中一个,或者两个兼有, 下面是三种形式的<code>try</code>声明:</p>
|
||
<ol>
|
||
<li><code>try...catch</code></li>
|
||
<li><code>try...finally</code></li>
|
||
<li><code>try...catch...finally</code></li>
|
||
</ol>
|
||
<p><code>catch</code>子句包含<code>try</code>块中抛出异常时要执行的语句。也就是,你想让<code>try</code>语句中的内容成功, 如果没成功,你想控制接下来发生的事情,这时你可以在<code>catch</code>语句中实现。 如果在<code>try</code>块中有任何一个语句(或者从<code>try</code>块中调用的函数)抛出异常,控制立即转向<code>catch</code>子句。如果在<code>try</code>块中没有异常抛出,会跳过<code>catch</code>子句。</p>
|
||
<p><code>finally</code>子句在<code>try</code>块和<code>catch</code>块之后执行但是在下一个<code>try</code>声明之前执行。无论是否有异常抛出或捕获它总是执行。</p>
|
||
<p>你可以嵌套一个或者更多的<code>try</code>语句。如果内部的<code>try</code>语句没有<code>catch</code>子句,那么将会进入包裹它的<code>try</code>语句的<code>catch</code>子句。</p>
|
||
<p>你也可以用<code>try</code>语句去处理 JavaScript 异常。参考<a href="Guide">JavaScript 指南</a>了解更多关于 Javascript 异常的信息。</p>
|
||
<h3 id="无条件的catch子句">无条件的<code>catch</code>子句</h3>
|
||
<p>当使用单个无条件<code>catch</code>子句时,抛出的任何异常时都会进入到<code>catch</code>块。例如,当在下面的代码中发生异常时,控制转移到<code>catch</code>子句。</p>
|
||
<pre><code class="language-javascript">try {
|
||
throw "myException"; // generates an exception
|
||
}
|
||
catch (e) {
|
||
// statements to handle any exceptions
|
||
logMyErrors(e); // pass exception object to error handler
|
||
}
|
||
</code></pre>
|
||
<p><code>catch</code>块指定一个标识符(在上面的示例中为e),该标识符保存由<code>throw</code>语句指定的值。<code>catch</code>块是唯一的,因为当输入<code>catch</code>块时,JavaScript 会创建此标识符,并将其添加到当前作用域;标识符仅在<code>catch</code>块执行时存在;<code>catch</code>块执行完成后,标识符不再可用。</p>
|
||
<h3 id="条件catch子句">条件<code>catch</code>子句</h3>
|
||
<p></p><div class="blockIndicator nonStandard nonStandardHeader">
|
||
<p><strong><span class="icon-only-inline" title="This API has not been standardized."><i class="icon-warning-sign"> </i></span> 非标准</strong><br/>
|
||
该特性是非标准的,请尽量不要在生产环境中使用它!</p>
|
||
</div><p></p>
|
||
<p>你也可以用一个或者更多条件<code>catch</code>子句来处理特定的异常。在这种情况下,当异常抛出时将会进入合适的<code>catch</code>子句中。在下面的代码中,<code>try</code>块的代码可能会抛出三种异常:<a href="Reference/Global_Objects/TypeError" title="TypeError(类型错误) 对象用来表示值的类型非预期类型时发生的错误。"><code>TypeError</code></a>,<a href="Reference/Global_Objects/RangeError" title="RangeError对象标明一个错误,当一个值不在其所允许的范围或者集合中。"><code>RangeError</code></a>和<a href="Reference/Global_Objects/EvalError" title="本对象代表了一个关于 eval 函数的错误.此异常不再会被JavaScript抛出,但是EvalError对象仍然保持兼容性."><code>EvalError</code></a>。当一个异常抛出时,控制将会进入与其对应的<code>catch</code>语句。如果这个异常不是特定的,那么控制将转移到无条件<code>catch</code>子句。</p>
|
||
<p>当用一个无条件<code>catch</code>子句和一个或多个条件语句时,无条件<code>catch</code>子句必须放在最后。否则当到达条件语句之前所有的异常将会被非条件语句拦截。</p>
|
||
<p>提醒:这个功能不符合 ECMAscript 规范。</p>
|
||
<pre><code class="language-javascript">try {
|
||
myroutine(); // may throw three types of exceptions
|
||
} catch (e if e instanceof TypeError) {
|
||
// statements to handle TypeError exceptions
|
||
} catch (e if e instanceof RangeError) {
|
||
// statements to handle RangeError exceptions
|
||
} catch (e if e instanceof EvalError) {
|
||
// statements to handle EvalError exceptions
|
||
} catch (e) {
|
||
// statements to handle any unspecified exceptions
|
||
logMyErrors(e); // pass exception object to error handler
|
||
}
|
||
</code></pre>
|
||
<p>下面用符合 ECMAscript 规范的简单的 JavaScript 来编写相同的“条件catch子句”(显然更加<span class="s1">冗长的</span>,但是可以在任何地方运行):</p>
|
||
<pre><code class="language-javascript">try {
|
||
myroutine(); // may throw three types of exceptions
|
||
} catch (e) {
|
||
if (e instanceof TypeError) {
|
||
// statements to handle TypeError exceptions
|
||
} else if (e instanceof RangeError) {
|
||
// statements to handle RangeError exceptions
|
||
} else if (e instanceof EvalError) {
|
||
// statements to handle EvalError exceptions
|
||
} else {
|
||
// statements to handle any unspecified exceptions
|
||
logMyErrors(e); // pass exception object to error handler
|
||
}
|
||
}
|
||
</code></pre>
|
||
<h3 id="异常标识符">异常标识符</h3>
|
||
<p>当<code>try</code>块中的抛出一个异常时, <em><code>exception_var</code></em>(如<code>catch (e)</code>中的<code>e</code>)用来保存被抛出声明指定的值。你可以用这个标识符来获取关于被抛出异常的信息。</p>
|
||
<p>这个标识符是<code>catch</code>子语句内部的。换言之,当进入<code>catch</code>子语句时标识符创建,<code>catch</code>子语句执行完毕后,这个标识符将不再可用。</p>
|
||
<h3 id="finally子句"><code>finally</code>子句</h3>
|
||
<p><code>finally</code>子句包含的语句,是在<code>try</code>块和<code>catch</code>子句之后,但在<code>try..catch..finally</code>块之后的语句之前执行。请注意,无论是否抛出异常<code>finally</code>子句都会执行。此外,如果抛出异常,即使没有<code>catch</code>子句处理异常,<code>finally</code>子句中的语句也会执行。</p>
|
||
<p>当发生异常时,可以使用<code>finally</code>子句使您的脚本以更优雅的方式失败;例如,进行通常的清理,您可能需要释放脚本已经绑定的资源。</p>
|
||
<p>不管是否有异常发生,一个特殊异常相关的子句总会执行,这看起来可能有些奇怪,但这种结构确实是有用的。但重点不是<code>finally</code>子句总是会执行,而是<code>try..catch</code>语句后面的其它普通代码不会执行。</p>
|
||
<p>例如,如果<code>try</code>的<code>catch-block</code>中发生另一个异常,则包裹该<code>try..catch</code>的外部<code>try-block</code>中的剩余代码(或在主流中,如果不在外部<code>try-block</code>中)将不会执行,因为控制流会立即跳转到外部<code>try</code>的<code>catch-block</code>(或内部的错误发生器,如果不在<code>try-block</code>中)。</p>
|
||
<p>因此,外部的包裹<code>try-block</code>(或主流)退出之前完成常规清理的代码将被跳过。然而,如果<code>try-block</code>有一个<code>finally-block</code>,那么<code>finally-block</code>代码将可以先来执行这些清理,然后另一个try的<code>catch-block</code>(或者错误发生器)再来处理第二个异常。</p>
|
||
<p>现在,如果无论<code>try..catch</code>代码执行成功与否,清理例程都必须执行,并且<code>finally-block</code>只在发生异常时才执行,那么<code>finally-block</code>内部和外部需要多复制一份同样的清理例程,所以没有理由不只保留一个<code>finally-block</code>,并且不管是否有异常,都让它执行。</p>
|
||
<p>以下示例打开一个文件,然后执行使用该文件的语句(服务器端 JavaScript 允许您访问文件)。如果文件打开时抛出异常,则<code>finally</code>子句会在脚本失败之前关闭该文件。finally中的代码最终也会在<code>try</code>或<code>catch block</code>显式返回时执行。</p>
|
||
<pre><code class="language-javascript">openMyFile()
|
||
try {
|
||
// tie up a resource
|
||
writeMyFile(theData);
|
||
}
|
||
finally {
|
||
closeMyFile(); // always close the resource
|
||
}
|
||
</code></pre>
|
||
<h2 id="示例">示例</h2>
|
||
<h3 id="嵌套_try_块">嵌套 try 块</h3>
|
||
<p>首先让我们看看这里发生什么:</p>
|
||
<pre><code class="language-javascript">try {
|
||
try {
|
||
throw new Error("oops");
|
||
}
|
||
finally {
|
||
console.log("finally");
|
||
}
|
||
}
|
||
catch (ex) {
|
||
console.error("outer", ex.message);
|
||
}
|
||
|
||
// Output:
|
||
// "finally"
|
||
// "outer" "oops"
|
||
</code></pre>
|
||
<p>现在,如果我们已经捕获异常通过增加一个 catch 语句块</p>
|
||
<pre><code class="language-javascript">try {
|
||
try {
|
||
throw new Error("oops");
|
||
}
|
||
catch (ex) {
|
||
console.error("inner", ex.message);
|
||
}
|
||
finally {
|
||
console.log("finally");
|
||
}
|
||
}
|
||
catch (ex) {
|
||
console.error("outer", ex.message);
|
||
}
|
||
|
||
// Output:
|
||
// "inner" "oops"
|
||
// "finally"
|
||
</code></pre>
|
||
<p>现在,让我们再次抛出错误。</p>
|
||
<pre><code class="language-javascript">try {
|
||
try {
|
||
throw new Error("oops");
|
||
}
|
||
catch (ex) {
|
||
console.error("inner", ex.message);
|
||
throw ex;
|
||
}
|
||
finally {
|
||
console.log("finally");
|
||
}
|
||
}
|
||
catch (ex) {
|
||
console.error("outer", ex.message);
|
||
}
|
||
|
||
// Output:
|
||
// "inner" "oops"
|
||
// "finally"
|
||
// "outer" "oops"
|
||
</code></pre>
|
||
<p>任何给定的异常只会被离它最近的封闭 catch 块捕获一次。当然,在“inner”块抛出的任何新异常 (因为 catch 块里的代码也可以抛出异常),将会被“outer”块所捕获。</p>
|
||
<h3 id="从_finally_语句块返回">从 finally 语句块返回</h3>
|
||
<p>如果从<code>finally</code>块中返回一个值,那么这个值将会成为整个<code>try-catch-finally</code>的返回值,无论是否有<code>return</code>语句在<code>try</code>和<code>catch</code>中。这包括在<code>catch</code>块里抛出的异常。</p>
|
||
<pre><code class="language-javascript">try {
|
||
try {
|
||
throw new Error("oops");
|
||
}
|
||
catch (ex) {
|
||
console.error("inner", ex.message);
|
||
throw ex;
|
||
}
|
||
finally {
|
||
console.log("finally");
|
||
return;
|
||
}
|
||
}
|
||
catch (ex) {
|
||
console.error("outer", ex.message);
|
||
}
|
||
|
||
// 注: 此 try catch 语句需要在 function 中运行才能作为函数的返回值, 否则直接运行会报语法错误
|
||
// Output:
|
||
// "inner" "oops"
|
||
// "finally"
|
||
</code></pre>
|
||
<p>因为 finally 块里的 return 语句,"oops" 没有抛出到外层, 从 catch 块返回的值同样适用。</p>
|
||
<h2 id="规范">规范</h2>
|
||
<table class="standard-table">
|
||
<tbody>
|
||
<tr>
|
||
<th scope="col">Specification</th>
|
||
<th scope="col">Status</th>
|
||
<th scope="col">Comment</th>
|
||
</tr>
|
||
<tr>
|
||
<td><a class="external" href="https://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf" hreflang="en" lang="en" rel="noopener" title="ECMAScript 3rd Edition (ECMA-262)">ECMAScript 3rd Edition (ECMA-262)</a></td>
|
||
<td><span class="spec-Standard">Standard</span></td>
|
||
<td>Initial definition. Implemented in JavaScript 1.4</td>
|
||
</tr>
|
||
<tr>
|
||
<td><a class="external" href="https://www.ecma-international.org/ecma-262/5.1/#sec-12.14" hreflang="en" lang="en" rel="noopener">ECMAScript 5.1 (ECMA-262)<br/><small lang="zh-CN">try statement</small></a></td>
|
||
<td><span class="spec-Standard">Standard</span></td>
|
||
<td> </td>
|
||
</tr>
|
||
<tr>
|
||
<td><a class="external" href="https://www.ecma-international.org/ecma-262/6.0/#sec-try-statement" hreflang="en" lang="en" rel="noopener">ECMAScript 2015 (6th Edition, ECMA-262)<br/><small lang="zh-CN">try statement</small></a></td>
|
||
<td><span class="spec-Standard">Standard</span></td>
|
||
<td> </td>
|
||
</tr>
|
||
<tr>
|
||
<td><a class="external" href="https://tc39.github.io/ecma262/#sec-try-statement" hreflang="en" lang="en" rel="noopener">ECMAScript Latest Draft (ECMA-262)<br/><small lang="zh-CN">try statement</small></a></td>
|
||
<td><span class="spec-Draft">Draft</span></td>
|
||
<td>Not part of the current ECMA-262 standard: Multiple catch clauses and conditional clauses (SpiderMonkey extension, JavaScript 1.5).</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<h2 id="浏览器兼容">浏览器兼容</h2>
|
||
<div class="hidden">The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a class="external" href="https://github.com/mdn/browser-compat-data" rel="noopener">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</div>
|
||
<p></p><div class="bc-data"><a class="bc-github-link external" href="https://github.com/mdn/browser-compat-data" rel="noopener">Update compatibility data on GitHub</a><table class="bc-table bc-table-js"><thead><tr class="bc-platforms"><td></td><th class="bc-platform-desktop" colspan="6"><span>Desktop</span></th><th class="bc-platform-mobile" colspan="7"><span>Mobile</span></th><th class="bc-platform-server" colspan="1"><span>Server</span></th></tr><tr class="bc-browsers"><td></td><th class="bc-browser-chrome"><span class="bc-head-txt-label bc-head-icon-chrome">Chrome</span></th><th class="bc-browser-edge"><span class="bc-head-txt-label bc-head-icon-edge">Edge</span></th><th class="bc-browser-firefox"><span class="bc-head-txt-label bc-head-icon-firefox">Firefox</span></th><th class="bc-browser-ie"><span class="bc-head-txt-label bc-head-icon-ie">Internet Explorer</span></th><th class="bc-browser-opera"><span class="bc-head-txt-label bc-head-icon-opera">Opera</span></th><th class="bc-browser-safari"><span class="bc-head-txt-label bc-head-icon-safari">Safari</span></th><th class="bc-browser-webview_android"><span class="bc-head-txt-label bc-head-icon-webview_android">Android webview</span></th><th class="bc-browser-chrome_android"><span class="bc-head-txt-label bc-head-icon-chrome_android">Chrome for Android</span></th><th class="bc-browser-edge_mobile"><span class="bc-head-txt-label bc-head-icon-edge_mobile">Edge Mobile</span></th><th class="bc-browser-firefox_android"><span class="bc-head-txt-label bc-head-icon-firefox_android">Firefox for Android</span></th><th class="bc-browser-opera_android"><span class="bc-head-txt-label bc-head-icon-opera_android">Opera for Android</span></th><th class="bc-browser-safari_ios"><span class="bc-head-txt-label bc-head-icon-safari_ios">Safari on iOS</span></th><th class="bc-browser-samsunginternet_android"><span class="bc-head-txt-label bc-head-icon-samsunginternet_android">Samsung Internet</span></th><th class="bc-browser-nodejs"><span class="bc-head-txt-label bc-head-icon-nodejs">Node.js</span></th></tr></thead><tbody><tr><th scope="row"><code>try...catch</code></th><td class="bc-supports-yes bc-browser-chrome"><span class="bc-browser-name">Chrome</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
Yes</td><td class="bc-supports-yes bc-browser-edge"><span class="bc-browser-name">Edge</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
Yes</td><td class="bc-supports-yes bc-browser-firefox"><span class="bc-browser-name">Firefox</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
1</td><td class="bc-supports-yes bc-browser-ie"><span class="bc-browser-name">IE</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
6</td><td class="bc-supports-yes bc-browser-opera"><span class="bc-browser-name">Opera</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
Yes</td><td class="bc-supports-yes bc-browser-safari"><span class="bc-browser-name">Safari</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
Yes</td><td class="bc-supports-yes bc-browser-webview_android"><span class="bc-browser-name">WebView Android</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
Yes</td><td class="bc-supports-yes bc-browser-chrome_android"><span class="bc-browser-name">Chrome Android</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
Yes</td><td class="bc-supports-yes bc-browser-edge_mobile"><span class="bc-browser-name">Edge Mobile</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
Yes</td><td class="bc-supports-yes bc-browser-firefox_android"><span class="bc-browser-name">Firefox Android</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
4</td><td class="bc-supports-yes bc-browser-opera_android"><span class="bc-browser-name">Opera Android</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
Yes</td><td class="bc-supports-yes bc-browser-safari_ios"><span class="bc-browser-name">Safari iOS</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
Yes</td><td class="bc-supports-yes bc-browser-samsunginternet_android"><span class="bc-browser-name">Samsung Internet Android</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
Yes</td><td class="bc-supports-yes bc-browser-nodejs"><span class="bc-browser-name">nodejs</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
Yes</td></tr><tr><th scope="row">Conditional clauses <div class="bc-icons"><abbr class="only-icon" title="Deprecated. Not for use in new websites."><span>Deprecated</span><i class="ic-deprecated"></i></abbr><abbr class="only-icon" title="Non-standard. Expect poor cross-browser support."><span>Non-standard</span><i class="ic-non-standard"></i></abbr></div></th><td class="bc-supports-no bc-browser-chrome"><span class="bc-browser-name">Chrome</span><abbr class="bc-level-no only-icon" title="No support">
|
||
<span>No support</span>
|
||
</abbr>
|
||
No</td><td class="bc-supports-no bc-browser-edge"><span class="bc-browser-name">Edge</span><abbr class="bc-level-no only-icon" title="No support">
|
||
<span>No support</span>
|
||
</abbr>
|
||
No</td><td class="bc-supports-no bc-browser-firefox"><span class="bc-browser-name">Firefox</span><abbr class="bc-level-no only-icon" title="No support">
|
||
<span>No support</span>
|
||
</abbr>1 — 59</td><td class="bc-supports-no bc-browser-ie"><span class="bc-browser-name">IE</span><abbr class="bc-level-no only-icon" title="No support">
|
||
<span>No support</span>
|
||
</abbr>
|
||
No</td><td class="bc-supports-no bc-browser-opera"><span class="bc-browser-name">Opera</span><abbr class="bc-level-no only-icon" title="No support">
|
||
<span>No support</span>
|
||
</abbr>
|
||
No</td><td class="bc-supports-no bc-browser-safari"><span class="bc-browser-name">Safari</span><abbr class="bc-level-no only-icon" title="No support">
|
||
<span>No support</span>
|
||
</abbr>
|
||
No</td><td class="bc-supports-no bc-browser-webview_android"><span class="bc-browser-name">WebView Android</span><abbr class="bc-level-no only-icon" title="No support">
|
||
<span>No support</span>
|
||
</abbr>
|
||
No</td><td class="bc-supports-no bc-browser-chrome_android"><span class="bc-browser-name">Chrome Android</span><abbr class="bc-level-no only-icon" title="No support">
|
||
<span>No support</span>
|
||
</abbr>
|
||
No</td><td class="bc-supports-no bc-browser-edge_mobile"><span class="bc-browser-name">Edge Mobile</span><abbr class="bc-level-no only-icon" title="No support">
|
||
<span>No support</span>
|
||
</abbr>
|
||
No</td><td class="bc-supports-no bc-browser-firefox_android"><span class="bc-browser-name">Firefox Android</span><abbr class="bc-level-no only-icon" title="No support">
|
||
<span>No support</span>
|
||
</abbr>4 — 59</td><td class="bc-supports-no bc-browser-opera_android"><span class="bc-browser-name">Opera Android</span><abbr class="bc-level-no only-icon" title="No support">
|
||
<span>No support</span>
|
||
</abbr>
|
||
No</td><td class="bc-supports-no bc-browser-safari_ios"><span class="bc-browser-name">Safari iOS</span><abbr class="bc-level-no only-icon" title="No support">
|
||
<span>No support</span>
|
||
</abbr>
|
||
No</td><td class="bc-supports-no bc-browser-samsunginternet_android"><span class="bc-browser-name">Samsung Internet Android</span><abbr class="bc-level-no only-icon" title="No support">
|
||
<span>No support</span>
|
||
</abbr>
|
||
No</td><td class="bc-supports-no bc-browser-nodejs"><span class="bc-browser-name">nodejs</span><abbr class="bc-level-no only-icon" title="No support">
|
||
<span>No support</span>
|
||
</abbr>
|
||
No</td></tr><tr><th scope="row">Optional catch binding</th><td class="bc-supports-yes bc-browser-chrome"><span class="bc-browser-name">Chrome</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
66</td><td class="bc-supports-no bc-browser-edge"><span class="bc-browser-name">Edge</span><abbr class="bc-level-no only-icon" title="No support">
|
||
<span>No support</span>
|
||
</abbr>
|
||
No</td><td class="bc-supports-yes bc-browser-firefox"><span class="bc-browser-name">Firefox</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
58</td><td class="bc-supports-no bc-browser-ie"><span class="bc-browser-name">IE</span><abbr class="bc-level-no only-icon" title="No support">
|
||
<span>No support</span>
|
||
</abbr>
|
||
No</td><td class="bc-supports-yes bc-browser-opera"><span class="bc-browser-name">Opera</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
53</td><td class="bc-supports-no bc-browser-safari"><span class="bc-browser-name">Safari</span><abbr class="bc-level-no only-icon" title="No support">
|
||
<span>No support</span>
|
||
</abbr>
|
||
No</td><td class="bc-supports-yes bc-browser-webview_android"><span class="bc-browser-name">WebView Android</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
66</td><td class="bc-supports-yes bc-browser-chrome_android"><span class="bc-browser-name">Chrome Android</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
66</td><td class="bc-supports-no bc-browser-edge_mobile"><span class="bc-browser-name">Edge Mobile</span><abbr class="bc-level-no only-icon" title="No support">
|
||
<span>No support</span>
|
||
</abbr>
|
||
No</td><td class="bc-supports-yes bc-browser-firefox_android"><span class="bc-browser-name">Firefox Android</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
58</td><td class="bc-supports-yes bc-browser-opera_android"><span class="bc-browser-name">Opera Android</span><abbr class="bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
</abbr>
|
||
53</td><td class="bc-supports-no bc-browser-safari_ios"><span class="bc-browser-name">Safari iOS</span><abbr class="bc-level-no only-icon" title="No support">
|
||
<span>No support</span>
|
||
</abbr>
|
||
No</td><td class="bc-supports-no bc-browser-samsunginternet_android"><span class="bc-browser-name">Samsung Internet Android</span><abbr class="bc-level-no only-icon" title="No support">
|
||
<span>No support</span>
|
||
</abbr>
|
||
No</td><td class="bc-supports-no bc-browser-nodejs"><span class="bc-browser-name">nodejs</span><abbr class="bc-level-no only-icon" title="No support">
|
||
<span>No support</span>
|
||
</abbr>
|
||
No</td></tr></tbody></table><section class="bc-legend" id="sect1"><h3 class="offscreen" id="Legend">Legend</h3><dl><dt><span class="bc-supports-yes bc-supports">
|
||
<abbr class="bc-level bc-level-yes only-icon" title="Full support">
|
||
<span>Full support</span>
|
||
|
||
</abbr></span></dt><dd>Full support</dd><dt><span class="bc-supports-no bc-supports">
|
||
<abbr class="bc-level bc-level-no only-icon" title="No support">
|
||
<span>No support</span>
|
||
|
||
</abbr></span></dt><dd>No support</dd><dt><abbr class="only-icon" title="Non-standard. Expect poor cross-browser support."><span>Non-standard. Expect poor cross-browser support.</span><i class="ic-non-standard"></i></abbr></dt><dd>Non-standard. Expect poor cross-browser support.</dd><dt><abbr class="only-icon" title="Deprecated. Not for use in new websites."><span>Deprecated. Not for use in new websites.</span><i class="ic-deprecated"></i></abbr></dt><dd>Deprecated. Not for use in new websites.</dd></dl></section></div><p></p>
|
||
<h2 id="相关链接">相关链接</h2>
|
||
<ul>
|
||
<li><a href="Reference/Global_Objects/Error" title="通过Error的构造器可以创建一个错误对象。当运行时错误产生时,Error的实例对象会被抛出。Error对象也可用于用户自定义的异常的基础对象。下面列出了各种内建的标准错误类型。"><code>Error</code></a></li>
|
||
<li><a href="Reference/Statements/throw" title="throw语句用来抛出一个用户自定义的异常。当前函数的执行将被停止(throw之后的语句将不会执行),并且控制将被传递到调用堆栈中的第一个catch块。如果调用者函数中没有catch块,程序将会终止。"><code>throw</code></a></li>
|
||
</ul>
|
||
</article> |