Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

ฟังก์ชัน eval() ใน JavaScript คืออะไร และทำไมควรหลีกเลี่ยง

ฟังก์ชัน 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() ในโปรดักชัน - มีทางเลือกที่ปลอดภัยและเร็วกว่ามากมาย