我尝试模拟一个问题,即从外部网址加载的脚本会停止在我的网站上执行更多脚本。
我尝试通过调用不退出的函数来模拟这样的问题。我可以在firebug中看到错误,但页面上的不同脚本仍在执行。
Javascripts中有不同类型的错误吗?如果是:什么样的错误会阻止脚本执行?我只需要Firefox的答案。
修改
这个问题很容易被误解,但是Rob W得到了它:我需要抛出异常并且该异常需要停止进一步的脚本执行。
答案 0 :(得分:19)
回答标题:否
回答“JavaScript中存在不同类型的错误**:是的,请参阅MDN:Error
语法错误将阻止整个脚本块被执行, 其他错误(TypeErrors,Reference errors)只会在发生错误后停止执行。
不同的<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 {throw 'Code';}catch(e){}
console.log('Still executed');
<小时/> 没有通用的one-fit-all方法来阻止所有代码运行。对于单个脚本,您可以使用一些技巧来阻止代码进一步运行。
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中恢复原始值。
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
定义为常量)。
注意:最后一个方法无法正常使用函数声明(请参阅bug #115452,Chrome 17)
答案 1 :(得分:1)
您可以使用支持以下两个属性的错误对象:
name: The name of the error.
message: A description of the error.
例如,要停止执行,您可以使用:throw new Error("myError");
Javascripts中有不同类型的错误吗?
除了通用的Error构造函数之外,JavaScript中还有其他六个核心错误:
请参阅here有关这些错误的详细信息。
答案 2 :(得分:1)
停止执行
throw new Error('stopIt');
这也可以解决问题:
throw 'Stop It!';
答案 3 :(得分:0)
使用
try catch finally block
它会起作用