PHPのようにJavaScriptスクリプトを終了するにはどうすればexit
よいdie
ですか?私はそれがプログラミングのベストプラクティスではないことを知っていますが、そうする必要があります。
return;
あなたの要件に応じて、パラメータを指定せずに)、(ダイのような働きは十分かもしれません。
PHPのようにJavaScriptスクリプトを終了するにはどうすればexit
よいdie
ですか?私はそれがプログラミングのベストプラクティスではないことを知っていますが、そうする必要があります。
return;
あなたの要件に応じて、パラメータを指定せずに)、(ダイのような働きは十分かもしれません。
回答:
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 '';
}
「exit」関数は通常、パラメータまたはエラーメッセージとともにプログラムまたはスクリプトを終了します。たとえば、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
、ブラウザのXボタンをクリックするようなAPI を使用しました。
window.stop();
debugger;
実行を停止するJavaScriptコードにキーワードを配置します。次に、お気に入りのブラウザの開発者ツールを開いて、ページをリロードします。これで自動的に一時停止するはずです。ツールの[ ソース]セクションを開きます。debugger;
キーワードが強調表示され、スクリプトの実行を再開するオプションがあります。
お役に立てば幸いです。
詳細については:
ページ上のすべてのJavascriptの実行を強制的に終了する方法を探している場合、それを行うための公式に認可された方法があるかどうかはわかりません。正直言って、頭の上から外れるとは思えない)。通常、JavaScriptでコードの実行を停止する場合return
は、実行中の関数から実行します。(return
それが関数の最後のものであり、関数が値を返すべきではない場合、ステートメントはオプションです)返るだけでは十分ではない理由がある場合、なぜあなたが考える理由についての質問に詳細を編集する必要がありますあなたはそれを必要とし、おそらく誰かが別の解決策を提供することができます。
実際には、ほとんどのブラウザのJavascriptインタプリタは、エラーが発生した場合、現在のスクリプトの実行を単に停止することに注意してください。したがって、設定されていない変数の属性にアクセスするようなことができます:
function exit() {
p.blah();
}
そして、おそらくスクリプトを中止します。しかし、それはまったく標準的ではないので、あなたはそれを当てにすべきではありません、そしてそれは本当にひどい習慣のように思えます。
編集:わかりました、多分これはアラフラのものに照らしてそれほど良い答えではありませんでした。die()
彼がリンクした関数は基本的に私の2番目の段落を実装しますが、つまりエラーをスローするだけです。
コンセプトの誤用ですが、おそらく唯一の選択肢です。そして、はい、受け入れられた回答が言及するように、すべてのイベントリスナーをリセットする必要があります。私が正しい場合は、単一のエントリポイントも必要です。
その上に:スローされるとすぐに電子メールで報告するページが必要です。たとえば、Raven / Sentryを使用できます。しかし、それはあなた自身が偽陽性を生み出すことを意味します。そのような場合、デフォルトのハンドラーを更新して、そのようなイベントをフィルターで除外するか、Sentryのダッシュボードで無視するように設定する必要があります。
これは、ページのロード中は機能しません。ページのデコードも停止します。したがって、実際にそれを使用して、JavaScriptを使用しないページのバリアントをユーザーに提供することはできません。
デバッガーが開いているときにのみ実行を停止します。うまく機能しますが、成果物ではありません。
この小さな関数は、PHPのexit()によく似ています。他のソリューションと同様に、他に何も追加しないでください。
function exit(Msg)
{
Msg=Msg?'*** '+Msg:'';
if (Msg) alert(Msg);
throw new Error();
} // exit
スクリプトで未定義の関数を使用すると、「Uncaught ReferenceError」のためにスクリプトが停止します。私は次のコードを試してみましたが、最初の2行が実行されました。
これはスクリプトを停止する最良の方法だと思います。他の方法がある場合は、コメントしてください。また、別の最良かつ簡単な方法を知りたいです。ところで、私はスクリプトを終了するために、PHPのようなJavascriptでexitや組み込みの関数を取得しませんでした。誰かが知っているなら、私に知らせてください。
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();
これは、条件が存在する場合にスクリプトを終了する例です。これをSSEクライアント側のJavaScriptで使用します。
<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スクリプトを終了/死にます
スローはコンソールでエラーになるので、スローではなくリターンステートメントを使用します。それを行う最良の方法は、状態を確認することです
if(condition){
return //whatever you want to return
}
これは、コンソールにエラーを表示するのではなく、その行からプログラムの実行を停止するだけです。
if (condition) { new new }
またはを使用することもできますif (condition) { purpleMonkeyDishwasher(); }
。