دعونا نلقي نظرة أولاً على وظيفة JS
وظيفة تقييم جافا سكريبت ().
التعريف والاستخدام
تقوم الدالة eval() بتقييم سلسلة ما وتنفيذ كود JavaScript بداخلها.
القواعد
تقييم (سلسلة)
وصف المعلمة
السلسلة المطلوبة. سلسلة للتقييم تحتوي على تعبير JavaScript للتقييم أو عبارة للتنفيذ.
قيمة الإرجاع
القيمة التي تم الحصول عليها عن طريق تقييم السلسلة (إن وجدت).
يوضح
تقبل هذه الطريقة السلاسل الأولية فقط كمعلمات. إذا لم تكن معلمة السلسلة سلسلة أولية، فسترجع الطريقة دون تغيير. لذا، يرجى عدم تمرير كائنات السلسلة كمعلمات إلى الدالة eval().
تسمح تطبيقات ECMAScript بإطلاق استثناء EvalError إذا جرت محاولة لتجاوز خاصية eval أو تعيين طريقة eval() لخاصية أخرى واستدعائها من خلال تلك الخاصية.
يرمي
إذا لم تكن هناك أي تعبيرات أو عبارات قانونية في المعلمات، فسيتم طرح استثناء SyntaxError.
إذا تم استدعاء eval() بشكل غير قانوني، فسيتم طرح استثناء EvalError.
إذا كان كود Javascript الذي تم تمريره إلى eval() يؤدي إلى إنشاء استثناء، فسوف يقوم eval() بتمرير الاستثناء إلى المتصل.
نصائح وملاحظات
نصيحة: على الرغم من أن الدالة eval() قوية جدًا، إلا أنها نادرًا ما تُستخدم في الاستخدام الفعلي.
مثال
مثال 1
في هذا المثال، سنقوم بتطبيق eval() على عدة سلاسل نصية ونرى النتائج التي سيتم إرجاعها:
انسخ رمز الكود كما يلي:
<نوع البرنامج النصي = "نص/جافا سكريبت">
eval("x=10;y=20;document.write(x*y)")
document.write(eval("2+2"))
فاركس=10
وثيقة.كتابة (تقييم (س + 17))
</script>
الإخراج:
200
4
27
مثال 2
انظر إلى ما يُرجعه eval() في حالات أخرى:
انسخ رمز الكود كما يلي:
إيفال("2+3") // إرجاع 5
var myeval = eval; // قد يتم طرح استثناء EvalError
myeval("2+3"); // قد يتم طرح استثناء EvalError
يمكنك استخدام الكود التالي للتحقق مما إذا كانت معلمات eval() قانونية:
انسخ رمز الكود كما يلي:
يحاول {
تنبيه("النتيجة:" + eval(prompt("أدخل تعبير:"،")));
}
قبض (استثناء) {
تنبيه (استثناء)؛
}
الطريقة الأولى هي استخدام eval في js
وفيما يلي مثال كتبته بنفسي
انسخ رمز الكود كما يلي:
استدعاء("showmsg");
استدعاء الوظيفة (اسم الوظيفة) {
eval("هذا."+functionName+"()");
}
عرض الدالة(){
تنبيه("النجاح");
}
يمكن لـ eval التعرف تلقائيًا على السلسلة التي قمت بربطها كطريقة واستدعاءها.
لكن العيوب أيضًا ضخمة. تخيل أنه يمكن لشخص ما استدعاء أي من طرقك عن طريق تغيير اسم الطريقة التي تسميها بها.
يتم استخدام الطريقة الثانية بشكل أساسي كطريقة محددة ذاتيًا
ويرجع ذلك أساسًا إلى أن الطريقة الثانية تتطلب طريقة محددة للكتابة
انسخ رمز الكود كما يلي:
استدعاء الوظيفة (اسم الوظيفة) {
showmsgs["showmsg"]();
}
فار showmsgs = { showmsg: الوظيفة () {
تنبيه("النجاح");
}
}
استدعاء("showmsg");