Answers:
等同于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
如果您不在乎这是一个错误,请输入:
fail;
这将阻止您的主要(全局)代码继续进行。对于调试/测试的某些方面很有用。
window.fail
当前浏览器中未定义。
mikeyMouse;
-错误将终止。又快又脏。
有许多退出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
以退出。
就我而言,我使用了window.stop
API,就像单击浏览器上的X按钮一样:
window.stop();
将debugger;
关键字放在您要停止执行的JavaScript代码中。然后打开您喜欢的浏览器的开发人员工具并重新加载页面。现在它应该会自动暂停。打开工具的“ 源”部分:debugger;
关键字突出显示,您可以选择恢复脚本执行。
希望对您有所帮助。
有关更多信息,请访问:
如果您正在寻找一种方法来强制终止页面上所有Javascript的执行,那么我不确定是否存在正式批准的方法来执行此操作-似乎这种事情可能会带来安全风险(尽管老实说,我想不起来怎么回事)。通常,在Javascript中,当您希望代码停止运行时,return
无论执行什么功能,您都可以。(return
如果该语句是函数中的最后一句话,并且该函数不应返回值,则该语句是可选的)如果由于某种原因,返回对您而言不够好,则可能应在问题中编辑更多详细信息,以了解为什么您认为您需要它,也许有人可以提供替代解决方案。
请注意,实际上,大多数浏览器的Javascript解释器如果遇到错误,只会停止运行当前脚本。因此,您可以执行类似访问未设置变量的属性的操作:
function exit() {
p.blah();
}
并且可能会中止脚本。但是您不应该指望它,因为它根本不是标准,这确实是一种可怕的做法。
编辑:好的,鉴于Ólafur的回答,也许这不是一个很好的答案。尽管die()
他链接的功能基本上实现了我的第二段,即它只是引发了错误。
是对该概念的滥用,但可能是唯一的选择。而且,是的,您将必须重置所有事件侦听器,就像接受的答案中提到的一样。如果我是对的,您还需要一个入口点。
在它的顶部:您需要一个页面,该页面在抛出该页面后立即通过电子邮件向您报告-您可以为此使用Raven / Sentry。但这意味着,您会产生误报。在这种情况下,您还需要更新默认处理程序以过滤掉此类事件,或在Sentry的仪表板上忽略时设置此类事件。
在页面加载期间,这不起作用。它也停止页面的解码。因此,您不能真正使用它为用户提供页面的无JavaScript变体。
仅在打开调试器的情况下停止执行。效果很好,但无法交付。
在JavaScript中,有多种方法,以下是其中的一些方法
方法1:
throw new Error("Something went badly wrong!");
方法2:
return;
方法3:
return false;
方法4:
new new
方法5:
使用上述方法编写自定义函数,然后在需要的地方调用
注意: 如果您只想暂停代码执行,可以使用
debugger;
如果在脚本中使用任何未定义的函数,则由于“ 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.");
这是一个示例,如果存在条件,则终止脚本。如果在SSE客户端javascript中使用此代码,
<script src="sse-clint.js" host="https://sse.host" query='["q1,"q2"]' ></script>
可以从JSON解析中解析canot ...
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
}
这只是从该行停止了程序的执行,而不是在控制台中给出任何错误。
if (condition) { new new }
或if (condition) { purpleMonkeyDishwasher(); }
。