Qo'shimcha mavzular

Eval: kod satrini ishga tushirish

eval โ€” o'rnatilgan funksiya bo'lib, satr (string) ko'rinishida berilgan JavaScript kodini ishga tushirib, natijasini qaytaradi. U kuchli, ammo xavfli โ€” shu sabab zamonaviy kodda deyarli ishlatilmaydi.

Sintaksis

eval(code) satrni kod sifatida bajaradi va oxirgi ifodaning qiymatini qaytaradi:

eval-oddiy.js
// natija shu yerda chiqadi

Kod bir nechta ifoda va operatordan iborat bo'lishi mumkin:

eval-kop.js
// natija shu yerda chiqadi

eval ko'lami (scope)

eval ichidagi kod joriy leksik ko'lamda ishlaydi, ya'ni atrofdagi o'zgaruvchilarni ko'ra oladi:

eval-scope.js
// natija shu yerda chiqadi
Zamonaviy qat'iy rejimda ("use strict") eval ichida e'lon qilingan o'zgaruvchilar tashqi ko'lamga sizib chiqmaydi โ€” ular faqat eval ichida yashaydi. Bu tashqi kodni ifloslanishdan himoya qiladi.
eval-strict.js
// natija shu yerda chiqadi

Nega eval xavfli?

eval odatda quyidagi sabablarga ko'ra tavsiya etilmaydi:

Foydalanuvchi kiritgan matnni hech qachon to'g'ridan-to'g'ri evalga bermang. Bu ilovangizni to'liq egallab olishga imkon beruvchi jiddiy xavfsizlik teshigi.

Muqobillar

Deyarli har doim evalsiz yaxshiroq yechim topiladi:

Dinamik xususiyat nomi bilan evalsiz ishlash:

eval-muqobil.js
// natija shu yerda chiqadi

new Function โ€” evalga o'xshaydi, lekin kodni global ko'lamda ishlatadi, shuning uchun tashqi mahalliy o'zgaruvchilarga tegmaydi (bu esa aksincha xavfsizroq):

new-function.js
// natija shu yerda chiqadi
Agar dinamik kod juda zarur bo'lsa, eval o'rniga new Functionni afzal ko'ring โ€” u tashqi ko'lamga kira olmaydi, demak kamroq xavf tug'diradi.

Xulosa