ก่อนอื่นเรามาดูฟังก์ชั่นของ JS กันก่อน
ฟังก์ชัน JavaScript eval()
ความหมายและการใช้งาน
ฟังก์ชัน eval() ประเมินสตริงและรันโค้ด JavaScript ที่อยู่ภายใน
ไวยากรณ์
ประเมินผล (สตริง)
คำอธิบายพารามิเตอร์
จำเป็นต้องใช้สตริง สตริงที่จะประเมินซึ่งมีนิพจน์ JavaScript เพื่อประเมินหรือมีคำสั่งที่จะดำเนินการ
ส่งกลับค่า
ค่าที่ได้จากการประเมินสตริง (ถ้ามี)
แสดงให้เห็น
เมธอดนี้ยอมรับเฉพาะสตริงดิบเป็นพารามิเตอร์ หากพารามิเตอร์สตริงไม่ใช่สตริงดิบ วิธีการจะส่งกลับไม่เปลี่ยนแปลง ดังนั้นโปรดอย่าส่งวัตถุ String เป็นพารามิเตอร์ไปยังฟังก์ชัน eval()
การใช้งาน ECMAScript อนุญาตให้มีข้อยกเว้น EvalError เกิดขึ้น หากมีการพยายามแทนที่คุณสมบัติ eval หรือกำหนดวิธีการ eval() ให้กับคุณสมบัติอื่นและเรียกผ่านคุณสมบัตินั้น
โยน
หากไม่มีนิพจน์ทางกฎหมายหรือคำสั่งในพารามิเตอร์ ข้อยกเว้น SyntaxError จะถูกส่งออกไป
หากมีการเรียก eval() อย่างไม่ถูกต้อง ข้อยกเว้น EvalError จะถูกส่งออกไป
หากโค้ด Javascript ที่ส่งไปยัง eval() สร้างข้อยกเว้น eval() จะส่งข้อยกเว้นไปยังผู้เรียก
เคล็ดลับและหมายเหตุ
เคล็ดลับ: แม้ว่า eval() จะมีประสิทธิภาพมาก แต่ก็ไม่ค่อยได้ใช้งานจริง
ตัวอย่าง
ตัวอย่างที่ 1
ในตัวอย่างนี้ เราจะใช้ eval() กับสตริงต่างๆ และดูว่าผลลัพธ์ใดบ้างที่ส่งคืน:
คัดลอกรหัสรหัสดังต่อไปนี้:
<script type="text/javascript">
eval("x=10;y=20;document.write(x*y)")
document.write(eval("2+2"))
วาร์กซ์=10
document.write(eval(x+17))
</สคริปต์>
เอาท์พุท:
200
4
27
ตัวอย่างที่ 2
ดูสิ่งที่ eval() ส่งคืนในกรณีอื่น:
คัดลอกรหัสรหัสดังต่อไปนี้:
eval("2+3") // ส่งกลับ 5
var myeval = eval; // ข้อยกเว้น EvalError อาจถูกโยนทิ้ง
myeval("2+3"); // อาจมีข้อผิดพลาด EvalError เกิดขึ้น
คุณสามารถใช้โค้ดต่อไปนี้เพื่อตรวจสอบว่าพารามิเตอร์ของ eval() ถูกกฎหมายหรือไม่:
คัดลอกรหัสรหัสดังต่อไปนี้:
พยายาม {
alert("ผลลัพธ์:" + eval(prompt("ป้อนนิพจน์:"")));
-
จับ (ข้อยกเว้น) {
การแจ้งเตือน (ข้อยกเว้น);
-
วิธีแรกคือใช้ eval ใน js
ต่อไปนี้เป็นตัวอย่างที่เขียนโดยผมเอง
คัดลอกรหัสรหัสดังต่อไปนี้:
โทร("showmsg");
การเรียกใช้ฟังก์ชัน (ชื่อฟังก์ชัน) {
eval("this."+functionName+"()");
-
ฟังก์ชั่น showmsg(){
alert("สำเร็จ");
-
eval สามารถจดจำสตริงที่คุณเชื่อมต่อเป็นเมธอดและเรียกมันได้โดยอัตโนมัติ
แต่ข้อเสียก็มีมากเช่นกัน ลองนึกภาพว่ามีคนสามารถเรียกวิธีการใดๆ ของคุณได้โดยการเปลี่ยนชื่อวิธีการที่คุณเรียกมัน
วิธีที่สองส่วนใหญ่จะใช้เป็นวิธีที่กำหนดด้วยตนเอง
สาเหตุหลักมาจากวิธีที่สองต้องใช้วิธีเขียนเฉพาะ
คัดลอกรหัสรหัสดังต่อไปนี้:
การเรียกใช้ฟังก์ชัน (ชื่อฟังก์ชัน) {
showmsgs["showmsg"]();
-
var showmsgs = { showmsg: ฟังก์ชั่น () {
alert("สำเร็จ");
-
-
โทร("showmsg");