Adakah `eval()` dan `new Function()` Benar-benar Boleh Ditukar Dalam JavaScript?

Patricia Arquette
Lepaskan: 2024-11-02 11:01:02
asal
217 orang telah melayarinya

Are `eval()` and `new Function()` Truly Interchangeable in JavaScript?

Menyelidiki Perbezaan: Adakah eval() dan Function() baharu Boleh Ditukar dalam JavaScript?

Selalunya dalam JavaScript, kita menghadapi fungsi seperti eval() dan Fungsi baharu(). Walaupun sintaks mereka mungkin kelihatan serupa pada pandangan pertama, pemeriksaan lebih dekat mendedahkan perbezaan asas dalam tingkah laku mereka.

Pertimbangkan fungsi pernyataan tunggal berikut:

var evaluate = function(string) {
    return eval('(' + string + ')');
}

var func = function(string) {
    return (new Function( 'return (' + string + ')' )());
}

console.log(evaluate('2 + 1'));
console.log(func('2 + 1'));
Salin selepas log masuk

Adakah kedua-dua fungsi ini sama dalam operasinya ? Bertentangan dengan kepercayaan popular, mereka tidak.

eval() lwn. new Function()

  • eval(): Mentafsir rentetan sebagai ungkapan JavaScript dalam skop pelaksanaan semasa. Ia mempunyai keupayaan untuk mengakses pembolehubah setempat.
  • Fungsi baharu(): Membina objek fungsi daripada rentetan yang mengandungi kod JavaScript. Fungsi ini berjalan dalam skop yang berasingan, mengasingkannya daripada pembolehubah setempat.

Untuk menggambarkan perbezaan ini, pertimbangkan fungsi berikut:

function test1() {
    var a = 11;
    eval('(a = 22)');
    alert(a);            // alerts 22
}
Salin selepas log masuk

Dalam contoh ini, eval() mengubah suai pembolehubah tempatan 'a' dalam fungsi test1(), menghasilkan amaran sebanyak 22. Walau bagaimanapun, jika kita menggunakan Function('return (a = 22);')(), pembolehubah tempatan 'a' akan kekal tidak berubah.

Implikasi dan Awas

Walaupun kedua-dua eval() dan Function() baharu memenuhi tujuannya, adalah penting untuk ambil perhatian bahawa eval() membawa keselamatan yang wujud risiko. Keupayaannya untuk mengakses pembolehubah tempatan dan berpotensi mengubah suai skop global boleh membawa kepada akibat yang tidak diingini.

Akibatnya, secara amnya dinasihatkan untuk mengelak daripada menggunakan eval() melainkan benar-benar perlu. Data tidak dipercayai yang dihantar ke eval() boleh menjejaskan keselamatan aplikasi anda. Begitu juga, Function() baharu harus digunakan dengan berhati-hati apabila mengendalikan input yang tidak dipercayai.

Atas ialah kandungan terperinci Adakah `eval()` dan `new Function()` Benar-benar Boleh Ditukar Dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan