Rumah  >  Artikel  >  hujung hadapan web  >  Pengenalan kepada penggunaan fungsi eval() dalam kemahiran JavaScript_javascript

Pengenalan kepada penggunaan fungsi eval() dalam kemahiran JavaScript_javascript

WBOY
WBOYasal
2016-05-16 16:23:081428semak imbas

Dalam JavaScript, anda boleh menggunakan fungsi eval() untuk menghuraikan kod JavaScript dalam rentetan dan mengembalikan hasil pelaksanaan kod yang sepadan:


Salin kod Kod adalah seperti berikut:

console.log(eval("42 * 2"));//84


Pada asasnya, eval() ialah fungsi objek global JavaScript. Sebagai contoh, kod di atas adalah bersamaan dengan:


Salin kod Kod adalah seperti berikut:

console.log(this.eval("42 * 2"));//84


Walau bagaimanapun, apabila menggunakan pernyataan eval(), kaedah pertama di atas biasanya diterima pakai, iaitu, mengabaikan objek global dan menggunakan eval() secara langsung.

Penggunaan eval()

Atas dua sebab berikut, anda harus cuba mengelak daripada menggunakan pernyataan eval() dalam kod anda melainkan ia benar-benar perlu: ​​

1. Secara logiknya, rentetan harus digunakan untuk menyimpan kandungan dan maklumat semasa program berjalan, dan tidak boleh digunakan untuk menyimpan logik pengiraan tertentu.
2. Memandangkan parameter eval() ialah rentetan dan rentetan tidak boleh diproses secara leksikal, penterjemah JavaScript tidak boleh mengoptimumkan pernyataan panggilan eval().

Nilai pulangan eval()

Nilai pulangan eval() mengikut peraturan berikut:

1 Jika parameter eval() bukan rentetan, maka eval() akan mengembalikan parameter secara langsung.
2. Jika parameter eval() ialah rentetan, maka eval() menghuraikan rentetan menjadi kod dan melaksanakannya, dan mengembalikan hasil baris terakhir pelaksanaan kod.
3. Jika rentetan tidak boleh dihuraikan ke dalam kod undang-undang, eval() akan membuang SyntaxError.
4. Jika rentetan itu boleh dihuraikan ke dalam kod undang-undang, tetapi ralat dilaporkan semasa pelaksanaan kod ini, maka ralat akan dilaporkan kepada pernyataan eval() dan dilemparkan oleh eval().

Salin kod Kod adalah seperti berikut:

console.log(eval([1,2,3]));//[1, 2, 3]
console.log(typeof eval([1,2,3]));//objek

console.log(eval("42 */ 2"));//SyntaxError
console.log(eval("42 * 2; 22 * ​​​​3;"));//66 eval mengembalikan hasil ungkapan/penyataan terakhir
console.log(eval("null.toString()"));//TypeError, pengecualian dalam kod eval-ed akan disebarkan di luar eval().

Persekitaran boleh ubah

Eval() dalam JavaScript mempunyai ciri penting: kod dalam rentetan parameter eval() boleh mengakses pembolehubah dalam kod luaran, dan juga boleh mendedahkan pembolehubah yang baru dibuat dalam kod rentetan parameter kepada kod luaran. Iaitu, jika rentetan parameter eval() boleh dihuraikan secara sah, maka JS akan menggantikan kod yang dihuraikan dengan baris di mana eval() terletak:

Salin kod Kod adalah seperti berikut:

//persekitaran pembolehubah
var a = 108;
console.log(eval("function double(x){return x*2;} a = double(a)"));
console.log(a);//216
console.log(double(33));//66


Perlu diingat bahawa prasyarat untuk merealisasikan ciri di atas ialah kod dalam rentetan parameter eval() boleh dihuraikan secara sah. Sebagai tambahan kepada sintaks kod yang betul, JS juga memerlukan kod dalam rentetan parameter eval() mestilah "berisi sendiri": kod tersebut mestilah bermakna hanya setakat kod dalam rentetan parameter berkenaan. Sebagai contoh, anda tidak boleh menghantar rentetan seperti "kembali;" ke fungsi eval():


Salin kod Kod adalah seperti berikut:

ujian fungsi(){
var s = "ujian";
eval("kembali s;");
}
test();//SyntaxError: return not in function


Jika fungsi eval() digunakan secara langsung, pembolehubah yang diakses oleh kod dalam rentetan parameter eval() ialah pembolehubah fungsi di mana pernyataan eval() terletak, iaitu persekitaran pembolehubah yang digunakan oleh eval() fungsi ialah "persekitaran pembolehubah tempatan" . Jika anda tidak menggunakan fungsi eval() secara langsung, tetapi gunakan pembolehubah baharu yang turut menunjuk ke fungsi eval(), maka pembolehubah yang diakses oleh kod dalam rentetan parameter yang sepadan ialah pembolehubah global, iaitu pembolehubah yang digunakan oleh fungsi eval() Persekitaran ialah "persekitaran berubah global":


Salin kod Kod adalah seperti berikut:

//persekitaran pembolehubah tempatan dan persekitaran pembolehubah global
var dinamakan semula = eval;
var x = "asal", y = "asal";
fungsi f(){
var x = "baharu";
eval("x = 'Diubah';");
Kembalikan x;
}
fungsi g(){
var y = "baharu";
dinamakan semula("y = 'Diubah';");
Kembalikan y;
}
console.log(f(), x);//newChanged origin
console.log(g(), y);//new originChanged


Walau bagaimanapun, perlu diperhatikan bahawa tingkah laku dalam IE6, 7, dan 8 adalah berbeza daripada ini. Dalam IE6, 7, dan 8, walaupun fungsi eval() dinamakan semula, "persekitaran pembolehubah setempat" masih digunakan.

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