لا يوفر JS Native وظائف تنسيقية مريحة ، ويبدو أنه فوضوي ويصعب قراءته عن طريق الربط بين الأحرف ، وهو غير مريح للغاية للاستخدام. أنا شخصياً أشعر أن بناء الجملة المتوفر في C# أكثر فائدة ، مثل:
String.Format ("مرحبًا بك في تعلم" {0} '،' {0} 'رائع ، سوف {1}! "،" javaScript "،" love ") ؛طريقة الاستبدال المتسلسلة هذه واضحة نسبيًا ، وعند استبدال المحتوى نفسه ، يمكنك حفظ موقف تمرير المعلمات المكررة. فيما يلي إصدار التنفيذ البسيط من JS (بدون اختبار صارم):
(الدالة (تصدير) {esports.format = function () {var args = array.prototype.slice.call (وسيطات) ، sourcestr = args.shift () ؛ وظيفة execreplace (النص ، الاستبدال ، الفهرس) args.reduce (execreplace ، sourcester) ؛}}) (window.Utils = window.utils || {}) ؛ console.log (utils.format ("مرحبًا بك في التعلم" {0} '،' {0} 'رائع ، سوف {1}المفتاح هو هذه الجملة:
args.reduce (execreplace ، sourcester) ؛
هنا ، يتم استخدام وظيفة تقليل Array. تقليل وتخفيض الخفض هي وظائف مضافة حديثا في ES5. معلمات هذه الوظيفة هي تقليل (رد الاتصال ، القيمة الأولية). يستقبل رد الاتصال 4 معلمات:
السابق Value:
عند اجتياز الإدخال الأول لوظيفة رد الاتصال ، إذا تم تحديد القياس الأولي ، فسيتم استخدام القياس الأولي مباشرة ، إذا لم يتم تحديد عنصر أول من الصفيف ، فسيتم استخدام العنصر الأول من الصفيف.
قيمة الترافور الثانية واللاحقة هي نتيجة اجتياز سابق.
سيتم استخدام النتيجة التي تم إرجاعها بواسطة آخر اجتياز كقيمة إرجاع وظيفة تقليل.
CurrentValue: العنصر الحالي الذي اجتازه
الفهرس: فهرس العنصر الحالي في الصفيف
صفيف: صفيف أصلي
في كل تنفيذ في execreplace ، يتم استخدام النتيجة بعد الاستبدال السابق كسلسلة استبدال أصلية ، يتم استخدام فهرس العنصر الحالي كمحتوى ليتم استبداله ، ويتكرر بدوره لإكمال محتوى الاستبدال أخيرًا.
ملاحظة: التخفيض هو نفس وظيفة تقليل الوظيفة ، باستثناء أن ترتيب اجتيازه من اليمين إلى اليسار