ฉันจะออกจากสคริปต์ JavaScript เหมือนของ PHP exit
หรือdie
? ฉันรู้ว่ามันไม่ใช่วิธีการเขียนโปรแกรมที่ดีที่สุด แต่ฉันต้องการ
return;
อาจจะมากพอที่ขึ้นอยู่กับความต้องการของคุณทำหน้าที่เหมือนตาย () โดยไม่มีพารามิเตอร์
ฉันจะออกจากสคริปต์ JavaScript เหมือนของ PHP exit
หรือdie
? ฉันรู้ว่ามันไม่ใช่วิธีการเขียนโปรแกรมที่ดีที่สุด แต่ฉันต้องการ
return;
อาจจะมากพอที่ขึ้นอยู่กับความต้องการของคุณทำหน้าที่เหมือนตาย () โดยไม่มีพารามิเตอร์
คำตอบ:
เทียบเท่า JavaScript สำหรับของ die
PHP BTW มันเพิ่งจะโทร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" มักจะออกจากโปรแกรมหรือสคริปต์พร้อมกับข้อความแสดงข้อผิดพลาดว่าเป็นพารามิเตอร์ เช่น die (... ) ใน 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
แม้ในโปรแกรมอย่างง่ายที่ไม่มีตัวจับเหตุการณ์และสิ่งที่ดีที่สุดก็คือการใส่โค้ดในฟังก์ชั่น "main" แม้ว่าจะเป็นขั้นตอนเดียวเท่านั้น:
<script>
function main()
{
//code
}
main();
</script>
วิธีนี้เมื่อคุณต้องการหยุดโปรแกรมคุณสามารถใช้ "return"
หากคุณไม่สนใจว่ามันเป็นข้อผิดพลาดเพียงแค่เขียน:
fail;
สิ่งนี้จะหยุดรหัสหลักของคุณ (ส่วนกลาง) จากการดำเนินการต่อ มีประโยชน์สำหรับการดีบัก / ทดสอบในบางด้าน
window.fail
ไม่ได้กำหนดไว้ในเบราว์เซอร์ปัจจุบัน
mikeyMouse;
- ข้อผิดพลาดจะยุติลง มันรวดเร็วและสกปรก
มีหลายวิธีในการออกจากสคริปต์ JS หรือโหนด นี่คือสิ่งที่เกี่ยวข้องมากที่สุด:
// 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 ของเบราว์เซอร์ส่วนใหญ่จะหยุดใช้สคริปต์ปัจจุบันหากพบข้อผิดพลาด ดังนั้นคุณสามารถทำสิ่งต่าง ๆ เช่นเข้าถึงแอตทริบิวต์ของตัวแปร unset:
function exit() {
p.blah();
}
และมันอาจจะยกเลิกสคริปต์ แต่คุณไม่ควรคาดหวังสิ่งนั้นเพราะมันไม่ได้มาตรฐานและดูเหมือนว่ามันจะเป็นวิธีที่แย่มาก
แก้ไข : ตกลงบางทีนี่อาจไม่ใช่คำตอบที่ดีในแง่ของ aflafur แม้ว่าdie()
ฟังก์ชั่นที่เขาเชื่อมโยงจะใช้ย่อหน้าที่สองของฉันโดยพื้นฐานแล้วมันก็แค่เกิดข้อผิดพลาด
เป็นการใช้แนวคิดในทางที่ผิด แต่อาจเป็นทางเลือกเดียวเท่านั้น และใช่คุณจะต้องรีเซ็ตตัวรับฟังเหตุการณ์ทั้งหมดเช่นเดียวกับคำตอบที่ได้รับการยอมรับ คุณจะต้องมีจุดเข้าเดียวถ้าฉันพูดถูก
ด้านบนของมัน: คุณต้องการหน้าซึ่งรายงานให้คุณทางอีเมลทันทีที่มันพ่น - คุณสามารถใช้เช่น Raven / Sentry สำหรับสิ่งนี้ แต่นั่นหมายความว่าคุณสร้างผลบวกที่ผิดพลาดให้กับตัวเอง ในกรณีเช่นนี้คุณต้องอัปเดตตัวจัดการเริ่มต้นเพื่อกรองเหตุการณ์ดังกล่าวออกหรือตั้งค่าเหตุการณ์ดังกล่าวโดยไม่สนใจบนแผงควบคุมของ Sentry
สิ่งนี้ไม่ทำงานในระหว่างการโหลดหน้า จะหยุดการถอดรหัสของหน้าเช่นกัน ดังนั้นคุณจึงไม่สามารถใช้มันเพื่อให้ผู้ใช้งานไม่เสียค่าใช้จ่ายของหน้าเว็บของคุณ
หยุดการทำงานเมื่อเปิดดีบักเกอร์เท่านั้น ใช้งานได้ดี แต่ไม่สามารถส่งมอบได้
ใน 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" ฉันลองด้วยรหัสต่อไปนี้และดำเนินการสองบรรทัดแรก
ฉันคิดว่านี่เป็นวิธีที่ดีที่สุดในการหยุดสคริปต์ หากมีวิธีอื่นใดโปรดแสดงความคิดเห็นฉัน ฉันต้องการทราบวิธีที่ดีที่สุดและเรียบง่ายอีกด้วย BTW ฉันไม่ได้รับฟังก์ชั่น exit หรือ die inbuilt ใน 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();
ไม่สามารถใช้ได้ในสถานการณ์ส่วนใหญ่ แต่ฉันมีสคริปต์ async จำนวนมากที่ทำงานในเบราว์เซอร์และเป็นแฮ็คที่ฉันทำ
window.reload();
เพื่อหยุดทุกอย่าง
ฉันรู้ว่ามันเก่า แต่ถ้าคุณต้องการdie()
ฟังก์ชั่นPHP ที่คล้ายกันคุณสามารถทำได้:
function die(reason) {
throw new Error(reason);
}
การใช้งาน:
console.log("Hello");
die("Exiting script..."); // Kills script right here
console.log("World!");
ตัวอย่างด้านบนจะพิมพ์เฉพาะ "Hello"
ฉันใช้โค้ดส่วนนี้เพื่อหยุดการทำงาน:
throw new FatalError("!! Stop JS !!");
คุณจะได้รับข้อผิดพลาดของคอนโซล แต่มันใช้งานได้ดีสำหรับฉัน
นี่คือตัวอย่างที่หากมีเงื่อนไขอยู่ให้ยกเลิกสคริปต์ ฉันใช้สิ่งนี้ในจาวาสคริปต์ฝั่งไคลเอ็นต์ 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 ของคุณ
ฉันใช้คำสั่งส่งคืนแทนที่จะโยนเป็นโยนให้ข้อผิดพลาดในคอนโซล วิธีที่ดีที่สุดที่จะทำคือตรวจสอบสภาพ
if(condition){
return //whatever you want to return
}
สิ่งนี้จะหยุดการทำงานของโปรแกรมจากบรรทัดนั้นแทนที่จะให้ข้อผิดพลาดใด ๆ ในคอนโซล
if (condition) { new new }
if (condition) { purpleMonkeyDishwasher(); }