ฟังก์ชัน eval() ใช้สำหรับประเมินและรันโค้ด JavaScript ที่อยู่ในรูปแบบสตริง แต่ไม่แนะนำให้ใช้ เนื่องจากปัญหาด้านประสิทธิภาพและความปลอดภัย
ตัวอย่างการใช้งาน (เพื่อการศึกษาเท่านั้น)
<html>
<body>
<script>
var a = 30;
var b = 12;
var res1 = eval("a * b") + "<br>";
var res2 = eval("5 + 10") + "<br>";
document.write(res1); // 360
document.write(res2); // 15
</script>
</body>
</html>
ทำไม eval() ถึงอันตราย?
1. ช่องโหว่ด้านความปลอดภัย (Security Risk)
// อันตราย! ถ้า input มาจากผู้ใช้
var userInput = "alert('hacked'); deleteAllData();";
eval(userInput); // รันโค้ดร้ายได้!
2. ประสิทธิภาพต่ำ (Performance)
- เบราว์เซอร์ไม่สามารถ optimize โค้ดใน eval() ได้
- ทำงานช้ากว่าโค้ดทั่วไปมาก
- สร้าง scope ใหม่ทุกครั้งที่เรียก
3. Debugging ยาก
- Stack trace ไม่ชัดเจน
- Breakpoint ไม่ทำงานใน eval code
- Source map ไม่รองรับ
ทางเลือกที่ปลอดภัยกว่า
1. JSON.parse() สำหรับข้อมูล JSON
// แทน eval('(' + jsonString + ')')
var data = JSON.parse(jsonString);
2. Function Constructor (ยังมีความเสี่ยง แต่ดีกว่า eval)
var func = new Function('a', 'b', 'return a + b');
func(1, 2); // 3
3. Object/Map Lookup (แนะนำมากที่สุด)
const operations = {
'add': (a, b) => a + b,
'multiply': (a, b) => a * b
};
function calculate(op, a, b) {
return operations[op] ? operations[op](a, b) : null;
}
4. สำหรับคำนวณทางคณิตศาสตร์
// ใช้ math.js library หรือเขียน parser เอง // อย่าใช้ eval สำหรับคำนวณจาก user input
สรุป
อย่าใช้ eval() ในโปรดักชัน - มีทางเลือกที่ปลอดภัยและเร็วกว่ามากมาย