Как я могу выйти из сценария JavaScript так же, как PHP exit
или die
? Я знаю, что это не лучшая практика программирования, но мне нужно.
return;
может быть достаточно в зависимости от ваших требований, действует как die () без параметров.
Как я могу выйти из сценария JavaScript так же, как PHP exit
или die
? Я знаю, что это не лучшая практика программирования, но мне нужно.
return;
может быть достаточно в зависимости от ваших требований, действует как die () без параметров.
Ответы:
Эквивалент JavaScript для PHPdie
. Кстати, это просто звонки 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("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;
Это остановит ваш основной (глобальный) код. Полезно для некоторых аспектов отладки / тестирования.
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;
ключевое слово выделено, и у вас есть возможность возобновить выполнение скрипта.
Я надеюсь, что это помогает.
Больше информации на:
Я думаю, что на этот вопрос ответили, нажмите здесь для получения дополнительной информации. Ниже приведен краткий ответ.
throw new Error("Stop script");
Вы также можете использовать свой браузер для добавления точек останова, каждый браузер похож, проверьте информацию ниже для вашего браузера.
Для Chrome Информации изломов нажмите здесь
Для Firefox Информации изломов нажмите здесь
Для проводника точек разрыва информации нажмите
для Safari точки излома информации нажмите здесь
Если вы ищете способ принудительно прекратить выполнение всего Javascript на странице, я не уверен, что есть официально санкционированный способ сделать это - похоже, что это может быть угрозой безопасности (хотя для честно говоря, я не могу думать о том, как это будет с моей головы). Обычно в Javascript, когда вы хотите, чтобы ваш код прекратил работать, вы просто return
выполняете какую-либо функцию. (Thereturn
необязательное утверждение, если оно является последним в функции и функция не должна возвращать значение). Если есть какая-то причина, по которой возвращение недостаточно для вас, вам, вероятно, следует отредактировать более подробную информацию в вопросе о том, почему вы думаете, вам это нужно, и, возможно, кто-то может предложить альтернативное решение.
Обратите внимание, что на практике интерпретаторы Javascript большинства браузеров просто останавливают текущий скрипт, если они сталкиваются с ошибкой. Таким образом, вы можете сделать что-то вроде доступа к атрибуту неустановленной переменной:
function exit() {
p.blah();
}
и это, вероятно, прервет сценарий. Но вы не должны на это рассчитывать, потому что это совсем не стандартно, и это действительно кажется ужасной практикой.
РЕДАКТИРОВАТЬ : ОК, может быть, это не был хороший ответ в свете Олафура. Хотя die()
функция, с которой он связан, в основном реализует мой второй абзац, то есть просто выдает ошибку.
Это неправильное использование концепции, но, вероятно, единственный вариант. И, да, вам придется сбросить все прослушиватели событий, как указано в принятом ответе. Вам также понадобится одна точка входа, если я прав.
Вдобавок к этому: вам нужна страница, которая сообщает вам по электронной почте, как только она выдается - вы можете использовать, например, Raven / Sentry для этого. Но это означает, что вы производите ложные срабатывания. В таком случае вам также необходимо обновить обработчик по умолчанию, чтобы отфильтровать такие события или установить такие события на игнорирование на панели инструментов Sentry.
Это не работает во время загрузки страницы. Останавливает также декодирование страницы. Таким образом, вы не можете использовать его, чтобы предложить пользователю вариант страницы без javascript.
Останавливает выполнение только при открытом отладчике. Прекрасно работает, но не доставляется.
В JavaScript есть несколько способов, ниже приведены некоторые из них
Способ 1:
throw new Error("Something went badly wrong!");
Способ 2:
return;
Способ 3:
return false;
Способ 4:
new new
Способ 5:
напишите свою пользовательскую функцию, используя вышеуказанный метод и вызывайте там, где вам нужно
Примечание: если вы хотите просто приостановить выполнение кода, вы можете использовать
debugger;
Эта небольшая функция довольно близка к имитации выхода PHP (). Как и с другими решениями, больше ничего не добавляйте.
function exit(Msg)
{
Msg=Msg?'*** '+Msg:'';
if (Msg) alert(Msg);
throw new Error();
} // exit
Если вы используете любую неопределенную функцию в скрипте, тогда скрипт остановится из-за "Uncaught ReferenceError". Я попытался с помощью следующего кода и первые две строки выполнены.
Я думаю, это лучший способ остановить сценарий. Если есть другой способ, пожалуйста, прокомментируйте меня. Я также хочу знать другой лучший и простой способ. Кстати, я не получил выход или умереть встроенную функцию в Javascript, как PHP для завершения сценария. Если кто-то знает, пожалуйста, дайте мне знать.
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();
Я знаю, что это старый, но если вы хотите подобную die()
функцию PHP , вы можете сделать:
function die(reason) {
throw new Error(reason);
}
Использование:
console.log("Hello");
die("Exiting script..."); // Kills script right here
console.log("World!");
В приведенном выше примере будет напечатано только «Hello».
Это пример того, что если условие существует, то завершить сценарий. Я использую это в моем клиентском JavaScript SSE, если
<script src="sse-clint.js" host="https://sse.host" query='["q1,"q2"]' ></script>
нельзя анализировать прямо из анализа JSON ...
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(); }
.