คำสั่งที่ทนต่อข้อผิดพลาดของ js แม้ว่าข้อผิดพลาด js จะเกิดขึ้น ก็จะไม่แสดงข้อผิดพลาด (เพื่อป้องกันสัญลักษณ์สามเหลี่ยมสีเหลืองที่มุมขวาล่างของเบราว์เซอร์ มิฉะนั้นประสบการณ์ผู้ใช้จะไม่ดี)
คัดลอกรหัสรหัสดังต่อไปนี้:
window.onerror=function(){ส่งคืนจริง;}
ต่อไปนี้เพื่อรับข้อมูลข้อยกเว้น js เพื่ออำนวยความสะดวกให้นักพัฒนาในการค้นหาปัญหา
1 ลอง...จับ...
คัดลอกรหัสรหัสดังต่อไปนี้:
<script type="text/javascript">
var txt = ""
ข้อความฟังก์ชัน ()
-
พยายาม
-
addlert("ยินดีต้อนรับแขก!")
-
จับ(ผิดพลาด)
-
txt="มีข้อผิดพลาดในหน้านี้./n/n"
txt+="คลิก "ตกลง" เพื่อดูหน้านี้ต่อ/n"
txt+="คลิก "ยกเลิก" เพื่อกลับสู่หน้าแรก/n/n"
ถ้า(!ยืนยัน(txt))
-
document.location.href="/index.html"
-
-
-
</สคริปต์>
2,โยน
คัดลอกรหัสรหัสดังต่อไปนี้:
<script type="text/javascript">
var x=prompt("กรุณากรอกตัวเลขระหว่าง 0 ถึง 10:"")
พยายาม
-
ถ้า(x>10)
โยน "Err1"
อย่างอื่นถ้า(x<0)
โยน "Err2"
อย่างอื่นถ้า(คือNaN(x))
โยน "Err3"
-
จับ (เอ้อ)
-
ถ้า(er=="Err1")
alert("ผิดพลาด! ค่ามีขนาดใหญ่เกินไป!")
ถ้า(เอ้อ == "Err2")
alert("ผิดพลาด! ค่าน้อยเกินไป!")
ถ้า(เอ้อ == "Err3")
alert("ผิดพลาด! ค่าไม่ใช่ตัวเลข!")
-
</สคริปต์>
3 ข้อผิดพลาด:
คัดลอกรหัสรหัสดังต่อไปนี้:
<script type="text/javascript">
onerror=handleErr
var txt = ""
ฟังก์ชั่น handleErr (msg, url, l)
-
txt="มีข้อผิดพลาดในหน้านี้./n/n"
txt+="ข้อผิดพลาด:" + msg + "/n"
txt+="URL: " + url + "/n"
txt+="บรรทัด:" + l + "/n/n"
txt+="คลิก "ตกลง" เพื่อดำเนินการต่อ/n/n"
การแจ้งเตือน (txt)
กลับเป็นจริง
-
ข้อความฟังก์ชัน ()
-
addlert("ยินดีต้อนรับแขก!")
-
</สคริปต์>
การจัดการข้อยกเว้นใน js
คุณสามารถใช้ try...catch ใน JavaScript เพื่อจัดการข้อยกเว้นได้ ตัวอย่างเช่น:
ลอง { foo.bar();} catch (e) { alert(e.name + ": " + e.message);}
ในปัจจุบัน ข้อยกเว้นของระบบที่เราอาจจะได้รับส่วนใหญ่มี 6 ประเภทดังนี้
EvalError: เกิดขึ้นเมื่อเกิดข้อผิดพลาดในการรันโค้ดใน eval ()
RangeError: เกิดขึ้นเมื่อตัวแปรตัวเลขหรือพารามิเตอร์อยู่นอกช่วงที่ถูกต้อง
ReferenceError: เกิดขึ้นเมื่อยกเลิกการอ้างอิงการอ้างอิงที่ไม่ถูกต้อง
SyntaxError: เกิดขึ้นเมื่อเกิดข้อผิดพลาดทางไวยากรณ์ขณะแยกวิเคราะห์โค้ดใน eval ()
TypeError: เกิดขึ้นเมื่อตัวแปรหรือพารามิเตอร์ไม่ใช่ประเภทที่ถูกต้อง
URIError: เกิดขึ้นเมื่อ encodeURI() หรือ decodeURI() ถูกส่งผ่านพารามิเตอร์ที่ไม่ถูกต้อง
วัตถุข้อยกเว้นหกรายการข้างต้นทั้งหมดสืบทอดมาจากวัตถุข้อผิดพลาด พวกเขาทั้งหมดสนับสนุนวิธีการก่อสร้างสองวิธีต่อไปนี้:
ข้อผิดพลาดใหม่();ข้อผิดพลาดใหม่("ข้อมูลข้อยกเว้น");
วิธีการส่งข้อยกเว้นด้วยตนเองมีดังนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
พยายาม {
โยนข้อผิดพลาดใหม่ ("อ๊ะ!");}
จับ (จ) {
การแจ้งเตือน (e.name + `: " + e.message);}
หากคุณต้องการกำหนดประเภทของข้อมูลข้อยกเว้น คุณสามารถทำได้โดยทำตามขั้นตอนต่อไปนี้
คัดลอกรหัสรหัสดังต่อไปนี้:
พยายาม {
foo.bar();
} จับ (e) {
ถ้า (อินสแตนซ์ของ EvalError) {
การแจ้งเตือน (e.name + /// + e.message);
} อื่นถ้า (e อินสแตนซ์ของ RangeError) {
การแจ้งเตือน (e.name + `: " + e.message);
//ฯลฯ
-
ข้อผิดพลาดมีคุณสมบัติหลักดังต่อไปนี้:
คำอธิบาย: คำอธิบายข้อผิดพลาด (มีเฉพาะใน IE เท่านั้น)
fileName: ชื่อไฟล์ของข้อผิดพลาด (ใช้ได้เฉพาะใน Mozilla)
lineNumber: จำนวนบรรทัดที่มีข้อผิดพลาด (ใช้ได้เฉพาะใน Mozilla)
ข้อความ: ข้อความแสดงข้อผิดพลาด (เหมือนกับคำอธิบายภายใต้ IE)
ชื่อ: ประเภทข้อผิดพลาด
หมายเลข: รหัสข้อผิดพลาด (ใช้ได้เฉพาะใน IE)
stack: ข้อมูลสแต็กข้อผิดพลาดเช่น Stack Trace ใน Java (ใช้ได้เฉพาะใน Mozilla)
ดังนั้น เพื่อให้เข้าใจข้อความแสดงข้อผิดพลาดได้ดีขึ้น เราสามารถเปลี่ยนส่วนที่จับได้ให้อยู่ในรูปแบบต่อไปนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
พยายาม {
foo.bar();
} จับ(จ) {
ถ้า (ประเภทเบราว์เซอร์ != BROWSER_IE) {
alert("ชื่อ: " + e.name + "ข้อความ: " + e.message + "lineNumber: " + e.lineNumber + "fileName: " + e.fileName + "stack: " + e.stack);
} อื่น {
alert("ชื่อ: " + e.name + "errorNumber: " + (e.number & 0xFFFF) + "ข้อความ: " + e.message "); } } "
คำสั่ง Throw ใน JavaScript สามารถ Throw Object ใดๆ ก็ได้ และเราสามารถรับ Object นี้ได้ทันที ตัวอย่างเช่น:
คัดลอกรหัสรหัสดังต่อไปนี้:
พยายาม {
โยนวันที่ใหม่ (); // โยนวัตถุเวลาปัจจุบัน } catch (e) { alert(e.toLocaleString()); // ใช้รูปแบบท้องถิ่นเพื่อแสดงเวลาปัจจุบัน
-