我如何像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.stop
API,就像单击浏览器上的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
}
这只是从该行停止了程序的执行,而不是在控制台中给出任何错误。
文章标签:die , exit , javascript
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!