كثيرا ما أرى أمثلة مثل هذا:
نسخة الكود كما يلي:
var a ؛
var b = !! a ؛
A غير محدد بشكل افتراضي. ! A صحيح ، !! A خاطئ ، وبالتالي فإن قيمة B خاطئة ، ولم تعد غير محددة ، ولا قيم أخرى ، والتي توفر بشكل أساسي الراحة للحكم اللاحق.
!
نظرًا لأن JavaScript هي لغة من النوع الضعيف (لا تحتوي المتغيرات على أنواع بيانات ثابتة) ، فإنها تحتاج أحيانًا إلى إلقاءها على النوع المقابل ، مثل:
نسخة الكود كما يلي:
A = parseint ("1234")
a = "1234 ″ -0 // تحويل إلى رقم
ب = 1234+"// تحويل إلى سلسلة
c = someObject.toString () // تحويل الكائن إلى سلسلة
من بينها ، الأول والرابع من التحويلات الصريحة ، و 2 و 3 من التحويلات الضمنية
تحويل منطقية ، قواعد اتفاقية JavaScript
كاذبة ، غير محددة ، لاغية ، 0 ، "" كاذبة
صحيح ، 1 ، "شيء ما" ، [كائن] صحيح
بالنسبة للقيم الأخرى التي تم تحويلها ضمنيًا مثل NULL وغير المحددة ، فإن المشغل! سيؤدي إلى نتائج حقيقية ، وبالتالي فإن استخدام علامات التعجب هو تحويل هذه القيم إلى القيم المنطقية "المكافئة" ؛
لنلقي نظرة مرة أخرى:
نسخة الكود كما يلي:
فار فو
تنبيه (! foo) ؛ // في حالة غير محددة ، تعيد علامة التعجب بشكل صحيح ؛
التنبيه (! go) ؛ // في حالة فارغة ، فإن عودة علامة التعجب صحيحة أيضًا ؛
var o = {flag: true} ؛
var test = !!
تنبيه (اختبار) ؛
يوضح هذا المثال أنه عندما يكون عودة علامة تعجب واحدة ، وعودة علامة تعجب اثنين خاطئة ، وبالتالي فإن وظيفة علامة التعجب هي أنه إذا تم تعيين قيمة المتغير بوضوح ( NULL/undified/0/"و" القيم المكافئة) ، سيتم إرجاع النتيجة بناءً على القيمة الفعلية للمتغير.