繁体   English   中英

我可以在 Javascript 中抛出异常,从而停止 Javascript 执行吗?

[英]Can I throw an exception in Javascript, that stops Javascript execution?

我尝试模拟一个问题,即从外部 url 加载的脚本停止在我的站点上执行任何更多脚本。

我试图通过调用一个不退出的函数来模拟这样的问题。 我可以在 firebug 中看到错误,但页面上的不同脚本仍在执行。

Javascript 中是否存在不同类型的错误? 如果是:什么样的错误会停止脚本执行? 我只需要 Firefox 的这个答案。

编辑

这个问题很容易被误解,但 Rob W 明白了:我需要抛出一个异常并且该异常需要停止进一步的脚本执行。

对标题的回答:没有
回答“JavaScript 中是否存在不同类型的错误**:是的,请参阅 MDN: 错误
语法错误会阻止整个脚本块执行,其他错误(TypeErrors、Reference 错误)只会在错误发生后停止执行。

不同的<script>块分别执行。 您不能通过在第一个块中抛出错误来阻止第二个块的执行(演示: http : //jsfiddle.net/WJCEN/ )。

<script>Example: Syntax error in this script.</script>
<script>console.log('Still executed.')</script>

此外,如果使用try-catch (演示: http : //jsfiddle.net/WJCEN/1/try-catch错误,则该错误甚至不会停止整个块的执行。

try {throw 'Code';}catch(e){}
console.log('Still executed');


没有通用的万能方法可以阻止所有代码运行。 对于单个脚本,您可以使用一些技巧来阻止代码进一步运行。

示例 1(演示):临时覆盖一个方法

1: <script>window._alert = alert;alert=null;</script> 2: <script>alert('Some code!');confirm('Not executing');</script> 3: <script>alert=_alert;delete window._alert;alert('Done!');</script>

此方法基于脚本 2 期望alert是一个函数这一事实。 我们已将alert重写为非函数属性(脚本 1)。 脚本 2 抛出TypeError ,并跳过第二个块。
我们在脚本 3 中恢复原始值。

示例 2(演示):定义一个常量方法,该方法不能被覆盖。

 4. <script>Object.defineProperty(window, 'test',{value:null});</script> 5. <script>var test=function(){alert('Test');};test();alert('What?');</script>

此方法依赖于Object.defineProperty方法,以有效定义常量值。 在严格模式下, var test声明会抛出一个 TypeError: "test is read-only"。
当严格模式未启用时,会在test()处抛出 TypeError :“test is not a function”(因为我们在脚本 4 中将test定义为常量)。

注意:最后一种方法在函数声明中不能正常工作(参见错误 #115452 ,Chrome 17)

停止执行

throw new Error('stopIt');

这也可以解决问题:

throw 'Stop It!';

您可以使用支持以下两个属性的错误对象:

name: The name of the error.
message: A description of the error.

例如,要停止执行,您可以使用: throw new Error("myError");

Javascript 中是否存在不同类型的错误?

除了通用的 Error 构造函数之外,JavaScript 中还有其他六个核心错误:

请参阅此处有关这些错误的详细信息。

使用try catch finally block

它会做的伎俩

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM