如何终止JavaScript中的脚本?

2020/11/08 03:23 · javascript ·  · 0评论

我如何像PHPexit一样退出JavaScript脚本die我知道这不是最佳编程实践,但我需要这样做。

等同于PHP的JavaScriptdie顺便说一句,它只是调用exit()(感谢splattne):

function exit( status ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Brett Zamir (http://brettz9.blogspot.com)
    // +      input by: Paul
    // +   bugfixed by: Hyam Singer (http://www.impact-computing.com/)
    // +   improved by: Philip Peterson
    // +   bugfixed by: Brett Zamir (http://brettz9.blogspot.com)
    // %        note 1: Should be considered expirimental. Please comment on this function.
    // *     example 1: exit();
    // *     returns 1: null

    var i;

    if (typeof status === 'string') {
        alert(status);
    }

    window.addEventListener('error', function (e) {e.preventDefault();e.stopPropagation();}, false);

    var handlers = [
        'copy', 'cut', 'paste',
        'beforeunload', 'blur', 'change', 'click', 'contextmenu', 'dblclick', 'focus', 'keydown', 'keypress', 'keyup', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'resize', 'scroll',
        'DOMNodeInserted', 'DOMNodeRemoved', 'DOMNodeRemovedFromDocument', 'DOMNodeInsertedIntoDocument', 'DOMAttrModified', 'DOMCharacterDataModified', 'DOMElementNameChanged', 'DOMAttributeNameChanged', 'DOMActivate', 'DOMFocusIn', 'DOMFocusOut', 'online', 'offline', 'textInput',
        'abort', 'close', 'dragdrop', 'load', 'paint', 'reset', 'select', 'submit', 'unload'
    ];

    function stopPropagation (e) {
        e.stopPropagation();
        // e.preventDefault(); // Stop for the form controls, etc., too?
    }
    for (i=0; i < handlers.length; i++) {
        window.addEventListener(handlers[i], function (e) {stopPropagation(e);}, true);
    }

    if (window.stop) {
        window.stop();
    }

    throw '';
}

“退出”功能通常会退出程序或脚本,并以错误信息作为参数。例如php中的die(...)

die("sorry my fault, didn't mean to but now I am in byte nirvana")

JS中的等效项是使用throw关键字来发出错误信号,如下所示:

throw new Error();

您可以轻松地对此进行测试:

var m = 100;
throw '';
var x = 100;

x
>>>undefined
m
>>>100

即使在没有句柄,事件等的简单程序中,也最好将代码放入“主”函数中,即使它是唯一的过程也是如此:

<script> 
function main()
{
//code

}
main();
</script>

这样,当您要停止程序时,可以使用“返回”。

如果您不在乎这是一个错误,请输入:

fail;

这将阻止您的主要(全局)代码继续进行。对于调试/测试的某些方面很有用。

许多退出JS或Node脚本的方法。这里是最相关的:

// This will never exit!
setInterval((function() {  
    return;
}), 5000);

// This will exit after 5 seconds, with signal 1
setTimeout((function() {  
    return process.exit(1);
}), 5000);

// This will also exit after 5 seconds, and print its (killed) PID
setTimeout((function() {  
    return process.kill(process.pid);
}), 5000);

// This will also exit after 5 seconds and create a core dump.
setTimeout((function() {  
    return process.abort();
}), 5000);

如果您位于REPL中(即在node命令行上运行后),则可以键入.exit以退出。

debugger;关键字放在您要停止执行的JavaScript代码中。然后打开您喜欢的浏览器的开发人员工具并重新加载页面。现在它应该会自动暂停。打开工具的“源”部分:debugger;关键字突出显示,您可以选择恢复脚本执行。

希望对您有所帮助。

有关更多信息,请访问:

就我而言,我使用了window.stopAPI,就像单击浏览器上的X按钮:

window.stop();

我认为此问题已得到解答,请单击此处以获取更多信息。以下是发布的简短答案。

throw new Error("Stop script");

您还可以使用浏览器添加断点,每个浏览器都类似,请在下面查看您的浏览器信息。

对于Chrome的破发点信息请点击这里

对于Firefox破发点信息请点击
这里

对于浏览器破发点信息
点击

在Safari中断点信息请点击
这里

如果您正在寻找一种方法来强制终止页面上所有Javascript的执行,那么我不确定是否存在官方批准的方法来执行此操作-似乎这可能会带来安全风险(尽管老实说,我想不起来怎么回事。通常,在Javascript中,当您希望代码停止运行时,return无论执行什么功能,您都可以。return如果语句是函数中的最后一句话,并且该函数不应返回值,则语句是可选的)如果由于某种原因,返回对于您而言不够好,则您可能应在问题中编辑更多详细信息,以了解为什么您认为您需要它,也许有人可以提供替代解决方案。

请注意,实际上,大多数浏览器的Javascript解释器如果遇到错误,只会停止运行当前脚本。因此,您可以执行类似访问未设置变量的属性的操作:

function exit() {
    p.blah();
}

并且可能会中止脚本。但是您不应该指望它,因为它根本不是标准,这确实是一种可怕的做法。

编辑:好的,鉴于Ólafur的回答,也许这不是一个很好的答案。尽管die()他链接功能基本上实现了我的第二段,即它只是引发了错误。

抛出“”;

是对该概念的滥用,但可能是唯一的选择。而且,是的,您将必须重置所有事件侦听器,就像接受的答案中提到的一样。如果我是对的,您还需要一个入口点。

在其顶部:您需要一个页面,该页面在抛出该页面后立即通过电子邮件向您报告-您可以为此使用Raven / Sentry。但这意味着,您会产生误报。在这种情况下,您还需要更新默认处理程序以过滤掉此类事件,或者在Sentry的仪表板上忽略设置此类事件。

window.stop();

在页面加载期间,这不起作用。它也停止页面的解码。因此,您不能真正使用它为用户提供页面的无JavaScript变体。

调试器;

仅在打开调试器的情况下停止执行。效果很好,但无法交付。

在JavaScript中,有多种方法,以下是其中的一些方法

方法1:

throw new Error("Something went badly wrong!");

方法2:

return;

方法3:

return false;

方法4:

new new

方法5:

使用上述方法编写自定义函数,然后在需要的地方调用

注意:
如果您只想暂停代码执行,可以使用

debugger; 

这个小功能非常接近模仿PHP的exit()。与其他解决方案一样,不要添加其他任何内容。

function exit(Msg)
    {
    Msg=Msg?'*** '+Msg:'';
    if (Msg) alert(Msg);
    throw new Error();
    } // exit

如果在脚本中使用任何未定义的函数,则由于“ Uncaught ReferenceError”,脚本将停止。我已经尝试通过以下代码并执行前两行。

我认为,这是停止脚本的最佳方法。如果还有其他方法,请给我评论。我也想知道另一种最佳和简单的方法。顺便说一句,我没有退出或终止像PHP这样的Java脚本中的内置函数来终止脚本。如果有人知道,请告诉我。

alert('Hello');

document.write('Hello User!!!');

die();  //Uncaught ReferenceError: die is not defined

alert('bye');

document.write('Bye User!!!');

如果您只是想停止执行其他代码而不会“抛出”任何错误,则可以window.onerror如下所示进行临时覆盖cross-exit

function exit(code) {
    const prevOnError = window.onerror
    window.onerror = () => {
        window.onerror = prevOnError
        return true
    }

    throw new Error(`Script termination with code ${code || 0}.`)
}

console.log("This message is logged.");
exit();
console.log("This message isn't logged.");

我正在使用iobroker,并且可以轻松地通过以下方式停止脚本

stopScript();

在大多数情况下不适用,但是我在浏览器中运行了许多异步脚本,作为黑客,我这样做

window.reload();

停止一切。

我知道这很旧,但是如果您想要类似的PHPdie()函数,则可以执行以下操作:

function die(reason) {
    throw new Error(reason);
}

用法:

console.log("Hello");
die("Exiting script..."); // Kills script right here
console.log("World!");

上面的示例将仅打印“ Hello”。

Simply create a BOOL condition ,
no need for complicated code here..

If even once you turn it to true/ or multiple times,
it will both give you one line of solution/not multiple -
basically simple as that.

i use this piece of code to stop execution:

throw new FatalError("!! Stop JS !!");

you will get a console error though but it works good for me.

This is an example, that,
if a condition exist, then terminate the script.
I use this in my SSE client side javascript, if the

<script src="sse-clint.js" host="https://sse.host" query='["q1,"q2"]' ></script>

canot be parsed right from JSON parse ...

if( ! SSE_HOST  ) throw new Error(['[!] SSE.js: ERR_NOHOST - finished !']);

...总的来说,思路是:

if( error==true) throw new Error([ 'You have This error' ,  'At this file', 'At this line'  ]);

这将终止/死亡您的javasript脚本

我使用return语句而不是throw,因为throw在控制台中给出了错误。最好的方法是检查状况

if(condition){
 return //whatever you want to return
}

这只是从该行停止了程序的执行,而不是在控制台中给出任何错误。

本文地址:http://javascript.askforanswer.com/ruhezhongzhijavascriptzhongdejiaoben.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!