Як я можу вийти з сценарію 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 '';
}
Функції "вихід" зазвичай виходять із програми або сценарію разом із повідомленням про помилку як параметр. Наприклад, die (...) у php
die("sorry my fault, didn't mean to but now I am in byte nirvana")
Еквівалент в JS є сигнал про помилку з кидком ключовим словом , як це:
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;
ключове слово виділено, і у вас є можливість відновити виконання сценарію.
Я сподіваюся, що це допомагає.
Більше інформації на:
Я думаю, що на це питання відповіли, натисніть тут для отримання додаткової інформації. Нижче наведена коротка відповідь, яку вона розміщена.
throw new Error("Stop script");
Ви також можете використовувати свій браузер, щоб додати точки перерви, кожен браузер схожий, перевірте інформацію нижче для свого браузера.
Для інформації про точки перерви в Chrome натисніть тут.
Для інформації про точки перерви Firefox натисніть тут.
Для інформації про точки перерви Explorer натисніть
Для інформації про точки перерви Safari натисніть тут
Якщо ви шукаєте спосіб примусово припинити виконання всіх Javascript на сторінці, я не впевнений, що існує офіційно санкціонований спосіб зробити це - це схоже на те, що може спричинити загрозу безпеці (хоча чесно кажучи, я не можу придумати, як це було б у верхній частині моєї голови). Зазвичай у Javascript, коли ви хочете, щоб ваш код перестав працювати, ви просто return
з будь-якої функції, яка виконується. ( return
Заява необов’язково, якщо це останнє в функції і функція не повинна повертати значення) Якщо є причина, що повернення недостатньо добре для вас, ви, ймовірно, повинні відредагувати детальніше питання, чому ви думаєте вам це потрібно, і, можливо, хтось може запропонувати альтернативне рішення.
Зауважте, що на практиці перекладачі Javascript більшості браузерів просто припиняють запускати поточний сценарій, якщо вони стикаються з помилкою. Таким чином, ви можете зробити щось на кшталт доступу до атрибуту невстановленої змінної:
function exit() {
p.blah();
}
і це, мабуть, скасує сценарій. Але на це не варто розраховувати, оскільки це зовсім не стандартне, і це справді здається жахливою практикою.
EDIT : Гаразд, можливо, це було не настільки хороша відповідь у світлі Олафура. Хоча die()
функція, з якою він пов'язується, в основному реалізує мій другий абзац, тобто він просто видає помилку.
Це неправильне використання концепції, але, мабуть, єдиний варіант. І так, вам доведеться скинути всіх слухачів подій, так само, як згадується прийнята відповідь. Також вам знадобиться єдиний пункт входу, якщо я маю рацію.
Нагорі: Ви хочете, щоб сторінка, яка повідомляє вам електронною поштою, як тільки вона перекинеться - ви можете використовувати для цього, наприклад, Ворона / Сентрі. Але це означає, що ви виробляєте помилкові позитиви. У такому випадку вам також потрібно оновити обробник за замовчуванням для фільтрації таких подій або встановлення таких подій на ігнорування на інформаційній панелі 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!");
Наведений вище приклад надрукує лише "Привіт".
Це приклад, який, якщо існує умова, припиняє сценарій. Я використовую це у своєму 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 замість кидка, оскільки кидок дає помилку в консолі. найкращий спосіб зробити це - перевірити стан
if(condition){
return //whatever you want to return
}
це просто зупиняє виконання програми з цього рядка, замість того, щоб створювати помилки в консолі.
if (condition) { new new }
або if (condition) { purpleMonkeyDishwasher(); }
.