JavaScript มีเคล็ดลับเล็กๆ น้อยๆ มากมายที่ทำให้การเขียนโปรแกรมง่ายขึ้น หนึ่งในนั้นคือฟังก์ชัน eval() ซึ่งถือว่าสตริงเป็นนิพจน์ JavaScript และดำเนินการสตริงนั้น ต่อไปนี้เป็นคำอธิบาย
ฟังก์ชันฟังก์ชัน Eval: ขั้นแรกให้ตีความโค้ด Javascript แล้วจึงดำเนินการ
codeString เป็นสตริงที่มีคำสั่ง Javascript ซึ่งคอมไพล์โดยใช้เอ็นจิ้น Javascript หลังจาก eval
ตัวอย่างเล็กๆ น้อยๆ:
var the_unevaled_answer = "2 + 3";
var the_evaled_answer = eval("2 + 3");
alert("คำตอบที่ไม่ได้รับการประเมินคือ " + the_unevaled_answer + " และคำตอบที่ได้รับการประเมินคือ " + the_evaled_answer);
หากคุณรันโปรแกรม eval นี้ คุณจะเห็นว่าใน JavaScript สตริง "2 + 3" ถูกดำเนินการจริง ๆ ดังนั้นเมื่อคุณตั้งค่าของ the_evaled_answer เป็น eval("2 + 3") JavaScript จะเข้าใจและส่งกลับผลรวมของ 2 และ 3 ไปที่ the_evaled_answer
นี่อาจดูไร้สาระไปหน่อย แต่จริงๆ แล้วมันสามารถทำอะไรที่น่าสนใจได้มาก ตัวอย่างเช่น การใช้ eval คุณสามารถสร้างฟังก์ชันได้โดยตรงตามอินพุตของผู้ใช้ ซึ่งจะทำให้โปรแกรมสามารถเปลี่ยนแปลงตัวเองตามเวลาหรือข้อมูลที่ผู้ใช้ป้อน และโดยการใช้การอนุมาน คุณจะได้รับผลลัพธ์ที่น่าอัศจรรย์
ในทางปฏิบัติ ไม่ค่อยมีการใช้ eval แต่บางทีคุณอาจเคยเห็นคนใช้มันเพื่อรับออบเจ็กต์ที่จัดทำดัชนียาก ปัญหาประการหนึ่งของ Document Object Model (DOM) ก็คือบางครั้งการได้วัตถุที่คุณต้องการมานั้นเป็นเรื่องยาก ตัวอย่างเช่น ต่อไปนี้เป็นฟังก์ชันที่ถามผู้ใช้ว่าจะแปลงรูปภาพใด: หากต้องการแปลงรูปภาพที่คุณจะใช้ฟังก์ชันต่อไปนี้:
ฟังก์ชั่น swapOne()
-
var the_image = prompt("เปลี่ยนนกแก้วหรือชีส"");
var the_image_object;
if (the_image == "นกแก้ว")
-
the_image_object = window.document.parrot;
-
อื่น
-
the_image_object = window.document.cheese;
}
the_image_object.src = "ant.gif";
-
พร้อมด้วยแท็กรูปภาพเหล่านี้:
<img src="/stuff3a/parrot.gif" name="นกแก้ว" />
<img src="/stuff3a/cheese.gif" name="cheese">
โปรดทราบสองสามบรรทัดเช่นนี้:
the_image_object = window.document.parrot;
มันกำหนดวัตถุรูปภาพให้กับตัวแปร แม้จะดูแปลกไปสักหน่อยแต่ก็ถูกต้องตามหลักไวยากรณ์ แต่จะเกิดอะไรขึ้นเมื่อคุณมี 100 ภาพแทนที่จะเป็นสองภาพ? คุณต้องเขียนคำสั่ง if-then-else หลายๆ คำสั่ง ถ้ามันอาจเป็นแบบนี้:
ฟังก์ชั่น swapTwo()
-
var the_image = prompt("เปลี่ยนนกแก้วหรือชีส"");
window.document.the_image.src = "ant.gif";
}
ขออภัย JavaScript จะค้นหารูปภาพชื่อ the_image แทนที่จะเป็น "cheese" หรือ "parrot" ตามที่คุณคาดไว้ ดังนั้นคุณจึงได้รับข้อความแสดงข้อผิดพลาด: "Haven't death of an objectชื่อ the_image"
โชคดีที่ eval ช่วยให้คุณได้วัตถุที่ต้องการ
ฟังก์ชั่น simpleSwap()
-
var the_image = prompt("เปลี่ยนนกแก้วหรือชีส"");
var the_image_name = "window.document" + the_image;
var the_image_object = eval(the_image_name);
the_image_object.src = "ant.gif";
-
หากผู้ใช้กรอก "parrot" ในกล่องพร้อมท์ สตริงจะถูกสร้างขึ้นในบรรทัดที่สอง window.document.parrot จากนั้นบรรทัดที่สามที่มี eval หมายความว่า: "Give me the object window.document.parrot" - นั่นคือ วัตถุภาพที่คุณต้องการ เมื่อคุณได้รับวัตถุรูปภาพแล้ว คุณสามารถตั้งค่าแอตทริบิวต์ src ให้เป็น ant.gif ได้ ซึ่งจริงๆ แล้วมีประโยชน์มากและผู้คนก็ใช้มันเป็นจำนวนมาก