Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Menilai Formula Rentetan dalam JavaScript Tanpa Menggunakan eval()?

Bagaimana untuk Menilai Formula Rentetan dalam JavaScript Tanpa Menggunakan eval()?

Patricia Arquette
Patricia Arquetteasal
2024-11-14 22:31:021003semak imbas

How to Evaluate String Formulas in JavaScript Without Using eval()?

Mengira Nilai Rentetan dalam JavaScript tanpa eval()

Menilai rentetan yang mengandungi formula ialah tugas biasa dalam pengaturcaraan. Walaupun JavaScript menawarkan fungsi eval() untuk tujuan tersebut, ia memberikan risiko keselamatan dan secara amnya tidak digalakkan. Berikut ialah pendekatan alternatif untuk mengira nilai rentetan tanpa menggunakan eval().

Menggunakan Pembina Function()

Pembina Function() boleh mencipta fungsi tanpa nama daripada rentetan. Ini boleh digunakan untuk menilai ungkapan rentetan. Sebagai contoh, pertimbangkan kod berikut:

function evil(fn) {
  return new Function('return ' + fn)();
}

console.log(evil('12/5*9+9.4*2')); // => 40.4

Dengan mengembalikan fungsi baharu yang dinilai oleh pembina Function(), kita boleh melaksanakan operasi matematik yang disimpan dalam rentetan. Dalam contoh ini, rentetan "12/5*9 9.4*2" dinilai kepada 40.4.

Kelebihan Pendekatan Ini

Berbanding dengan eval(), pembina Function() membenarkan untuk :

  • Keselamatan yang dipertingkatkan: Menilai rentetan dengan pembina Function() mengelakkan potensi kelemahan keselamatan yang dikaitkan dengan eval(), yang boleh melaksanakan kod arbitrari.
  • Keselamatan jenis: Pembina Function() menyemak sintaks hujah rentetan sebelum melaksanakannya, tingkatkan keselamatan jenis.

Semasa Function() constructor menawarkan alternatif yang lebih selamat dan boleh dipercayai kepada eval(), adalah penting untuk ambil perhatian bahawa ia masih menilai kod secara dinamik, jadi langkah berjaga-jaga harus diambil untuk mengelakkan input berniat jahat.

Atas ialah kandungan terperinci Bagaimana untuk Menilai Formula Rentetan dalam JavaScript Tanpa Menggunakan eval()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn