في جافا سكريبت، يتم تخزين البيانات النصية كسلاسل. لا يوجد نوع منفصل لشخصية واحدة.
التنسيق الداخلي للسلاسل هو دائمًا UTF-16، وهو غير مرتبط بتشفير الصفحة.
دعونا نتذكر أنواع الاقتباسات.
يمكن تضمين السلاسل ضمن علامات الاقتباس المفردة أو علامات الاقتباس المزدوجة أو علامات الاقتباس الخلفية:
دع مفردة = 'مقتبسة مفردة'؛ Let double = "علامة الاقتباس المزدوجة"؛ دع backticks = `backticks`؛
علامات الاقتباس المفردة والمزدوجة هي نفسها في الأساس. ومع ذلك، تسمح لنا علامات التحديد الخلفية بتضمين أي تعبير في السلسلة، عن طريق تغليفه في ${…}
:
مجموع الدالة (أ، ب) { العودة أ + ب؛ } تنبيه(`1 + 2 = ${sum(1, 2)}.`); // 1 + 2 = 3.
ميزة أخرى لاستخدام العلامات الخلفية هي أنها تسمح للسلسلة بأن تمتد إلى عدة أسطر:
دع قائمة الضيوف = `الضيوف: * جون * بيت * مريم `; تنبيه (قائمة الضيوف) ؛ // قائمة الضيوف، عدة أسطر
تبدو طبيعية، أليس كذلك؟ لكن علامات الاقتباس المفردة أو المزدوجة لا تعمل بهذه الطريقة.
إذا استخدمناها وحاولنا استخدام عدة أسطر، فسيكون هناك خطأ:
Let GuestList = "الضيوف: // خطأ: رمز مميز غير متوقع غير قانوني * جون"؛
تعود علامات الاقتباس المفردة والمزدوجة إلى العصور القديمة لإنشاء اللغة، عندما لم تؤخذ الحاجة إلى سلاسل متعددة الأسطر بعين الاعتبار. ظهرت Backticks في وقت لاحق بكثير وبالتالي فهي أكثر تنوعًا.
تسمح لنا علامات الرجوع أيضًا بتحديد "وظيفة القالب" قبل علامة الرجوع الأولى. بناء الجملة هو: func`string`
. يتم استدعاء الدالة func
تلقائيًا، وتستقبل السلسلة والتعبيرات المضمنة ويمكنها معالجتها. تُسمى هذه الميزة "القوالب ذات العلامات"، وهي نادرًا ما يتم رؤيتها، ولكن يمكنك القراءة عنها في MDN: Template literals.
لا يزال من الممكن إنشاء سلاسل متعددة الأسطر بعلامات اقتباس مفردة ومزدوجة باستخدام ما يسمى "حرف السطر الجديد"، المكتوب كـ n
، والذي يشير إلى فاصل أسطر:
Let GuestList = "الضيوف:n * Johnn * Peten * Mary"; تنبيه (قائمة الضيوف) ؛ // قائمة متعددة الأسطر من الضيوف، كما هو مذكور أعلاه
كمثال أبسط، هذين السطرين متساويان، لكنهما مكتوبان بشكل مختلف:
Let str1 = "HellonWorld"; // سطرين باستخدام "رمز السطر الجديد" // سطرين باستخدام سطر جديد عادي وعلامات خلفية دع str2 = `مرحبًا العالم`; تنبيه (str1 == str2)؛ // حقيقي
هناك أحرف خاصة أخرى أقل شيوعًا:
شخصية | وصف |
---|---|
n | خط جديد |
r | في ملفات Windows النصية، يمثل الجمع بين حرفين rn فاصلًا جديدًا، بينما في نظام التشغيل غير Windows يمثل n فقط . وذلك لأسباب تاريخية، ومعظم برامج Windows تتفهم ذلك أيضًا n . |
' ، " ، ` | يقتبس |
\ | شرطة مائلة عكسية |
t | فاتورة غير مدفوعة |
b , f , v | مسافة للخلف، وموجز النموذج، وعلامة التبويب العمودية - مذكورة للاكتمال، وهي قادمة من العصور القديمة، ولا تُستخدم في الوقت الحاضر (يمكنك نسيانها الآن). |
كما ترون، تبدأ جميع الأحرف الخاصة بحرف الشرطة المائلة العكسية . ويطلق عليها أيضًا "شخصية الهروب".
نظرًا لأنها مميزة جدًا، إذا أردنا إظهار شرطة مائلة عكسية فعلية داخل السلسلة، فنحن بحاجة إلى مضاعفتها:
تنبيه (`الشرطة المائلة العكسية: \`)؛ // الخط المائل العكسي:
يتم استخدام علامات الاقتباس "المفلترة" المزعومة '
, "
, `
لإدراج علامة اقتباس في نفس السلسلة المقتبسة.
على سبيل المثال:
تنبيه('أنا الفظ!' ); // أنا الفظ!
كما ترون، علينا أن نضع الاقتباس الداخلي في المقدمة بواسطة الشرطة المائلة العكسية '
، وإلا فإنه سيشير إلى نهاية السلسلة.
بالطبع، يجب فقط الهروب من الاقتباسات المشابهة للاقتباسات المرفقة. لذا، كحل أكثر أناقة، يمكننا التبديل إلى علامات الاقتباس المزدوجة أو العلامات الخلفية بدلاً من ذلك:
تنبيه("أنا الفظ!" ); // أنا الفظ!
إلى جانب هذه الأحرف الخاصة، هناك أيضًا تدوين خاص لأكواد Unicode u…
، نادرًا ما يتم استخدامه ويتم تناوله في الفصل الاختياري حول Unicode.
الخاصية length
لها طول السلسلة:
تنبيه( `بلديn`.الطول ); // 3
لاحظ أن n
هو حرف "خاص" واحد، وبالتالي فإن طوله هو بالفعل 3
.
length
هو خاصية
أحيانًا يخطئ الأشخاص الذين لديهم خلفية في بعض اللغات الأخرى في الكتابة عن طريق استدعاء الدالة str.length()
بدلاً من str.length
فقط. هذا لا يعمل.
يرجى ملاحظة أن str.length
هي خاصية رقمية وليست دالة. ليست هناك حاجة لإضافة قوسين بعد ذلك. ليس .length()
، ولكن .length
.
للحصول على حرف في الموضع pos
، استخدم الأقواس المربعة [pos]
أو اتصل بالطريقة str.at(pos). يبدأ الحرف الأول من موضع الصفر:
Let str = `Hello`; // الحرف الأول تنبيه (شارع [0])؛ // ح تنبيه(str.at(0)); // ح // الحرف الأخير تنبيه( str[str.length - 1] ); // س تنبيه(str.at(-1));
كما ترون، فإن طريقة .at(pos)
لها فائدة تتمثل في السماح بالوضعية السلبية. إذا كانت pos
سالبة، فسيتم حسابها من نهاية السلسلة.
لذا فإن .at(-1)
يعني الحرف الأخير، و .at(-2)
هو الحرف الذي يسبقه، وما إلى ذلك.
تُرجع الأقواس المربعة دائمًا undefined
للفهارس السالبة، على سبيل المثال:
Let str = `Hello`; تنبيه (شارع [-2])؛ // غير محدد تنبيه(str.at(-2)); // ل
يمكننا أيضًا التكرار على الأحرف باستخدام for..of
:
لـ (دع حرف "Hello") { تنبيه (شار)؛ // H,e,l,l,o (يصبح char "H"، ثم "e"، ثم "l" وما إلى ذلك) }
لا يمكن تغيير السلاسل في JavaScript. من المستحيل تغيير الشخصية.
دعونا نحاول إظهار أنه لا يعمل:
دع str = 'مرحبًا'; str[0] = 'h'; // خطأ تنبيه (شارع [0])؛ // لا يعمل
الحل المعتاد هو إنشاء سلسلة جديدة بالكامل وتعيينها إلى str
بدلاً من السلسلة القديمة.
على سبيل المثال:
دع str = 'مرحبًا'; str = 'h' + str[1]; // استبدال السلسلة تنبيه (شارع)؛ // أهلاً
وفي الأقسام التالية سنرى المزيد من الأمثلة على ذلك.
تعمل الطرق toLowerCase() وtoUpperCase() على تغيير الحالة:
تنبيه ("الواجهة".toUpperCase ())؛ // الواجهة تنبيه ("الواجهة".toLowerCase ())؛ // الواجهة
أو، إذا أردنا حرفًا واحدًا صغيرًا:
تنبيه( 'الواجهة'[0].toLowerCase() ); // 'أنا'
هناك طرق متعددة للبحث عن سلسلة فرعية داخل سلسلة.
الطريقة الأولى هي str.indexOf(substr, pos).
يبحث عن substr
في str
، بدءًا من الموضع المحدد pos
، ويعيد الموضع الذي تم العثور على التطابق فيه أو -1
إذا لم يتم العثور على أي شيء.
على سبيل المثال:
Let str = 'القطعة ذات المعرف'; تنبيه( str.indexOf('القطعة') ); // 0، لأنه تم العثور على "القطعة" في البداية تنبيه( str.indexOf('القطعة') ); // -1، لم يتم العثور عليه، البحث حساس لحالة الأحرف تنبيه( str.indexOf("id") ); // 1، تم العثور على "المعرف" في الموضع 1 (..idget with id)
تسمح لنا المعلمة الثانية الاختيارية ببدء البحث من موضع معين.
على سبيل المثال، أول ظهور لـ "id"
يكون في الموضع 1
. للبحث عن التكرار التالي، لنبدأ البحث من الموضع 2
:
Let str = 'القطعة ذات المعرف'; تنبيه( str.indexOf('id', 2)) // 12
إذا كنا مهتمين بجميع الأحداث، فيمكننا تشغيل indexOf
في حلقة. يتم إجراء كل مكالمة جديدة مع المركز بعد المباراة السابقة:
Let str = 'ماكر كالثعلب، قوي كالثور'; دع الهدف = 'كما'؛ // فلنبحث عنه دع نقاط البيع = 0؛ بينما (صحيح) { Let FoundPos = str.indexOf(target, pos); إذا (foundPos == -1) استراحة؛ تنبيه (`تم العثور عليه في ${foundPos}`)؛ pos = FoundPos + 1; // تابع البحث من الموضع التالي }
يمكن وضع نفس الخوارزمية بشكل أقصر:
Let str = "ماكر كالثعلب، قوي كالثور"; دع الهدف = "كما"؛ دع نقاط البيع = -1؛ بينما ((pos = str.indexOf(target, pos + 1)) != -1) { تنبيه (نقاط البيع)؛ }
str.lastIndexOf(substr, position)
هناك أيضًا طريقة مشابهة str.lastIndexOf(substr, Position) التي تبحث من نهاية السلسلة إلى بدايتها.
فإنه سيتم سرد الأحداث في الترتيب العكسي.
هناك إزعاج طفيف مع indexOf
في اختبار if
. لا يمكننا وضعها في if
مثل هذا:
Let str = "القطعة بالمعرف"; إذا (str.indexOf("القطعة")) { تنبيه("وجدناه"); // لا يعمل! }
لا يظهر alert
في المثال أعلاه لأن str.indexOf("Widget")
يُرجع 0
(بمعنى أنه وجد التطابق في موضع البداية). صحيح، ولكن if
اعتبر 0
false
.
لذلك، يجب علينا التحقق من -1
، مثل هذا:
Let str = "القطعة بالمعرف"; إذا (str.indexOf("القطعة") != -1) { تنبيه("وجدناه"); // يعمل الآن! }
الطريقة الأكثر حداثة str.includes(substr, pos) تُرجع true/false
اعتمادًا على ما إذا كانت str
تحتوي على substr
بداخلها.
إنه الاختيار الصحيح إذا أردنا اختبار التطابق، لكن لا نحتاج إلى موضعه:
تنبيه ("القطعة ذات المعرف". تتضمن ("القطعة"))؛ // حقيقي تنبيه ("مرحبا". يتضمن ("وداعا"))؛ // خطأ شنيع
الوسيطة الثانية الاختيارية لـ str.includes
هي الموضع الذي يمكن بدء البحث منه:
تنبيه ("القطعة". يتضمن ("المعرف"))؛ // حقيقي تنبيه ("القطعة". يتضمن ("المعرف"، 3) )؛ // خطأ، من الموضع 3 لا يوجد "معرف"
التابعان str.startsWith وstr.endsWith يفعلان بالضبط ما يقولانه:
تنبيه( "القطعة".startsWith("Wid")); // صحيح، "القطعة" تبدأ بـ "Wid" تنبيه( "القطعة".endsWith("get") ); // صحيح، "القطعة" تنتهي بـ "الحصول على"
هناك ثلاث طرق في JavaScript للحصول على سلسلة فرعية: substring
، substr
، slice
.
str.slice(start [, end])
إرجاع جزء السلسلة من start
إلى (ولكن ليس بما في ذلك) end
.
على سبيل المثال:
Let str = "stringify"; تنبيه( str.slice(0, 5)); // "سلسلة"، السلسلة الفرعية من 0 إلى 5 (لا تشمل 5) تنبيه( str.slice(0, 1)); // 's'، من 0 إلى 1، ولكن لا يتضمن 1، لذا فقط الحرف عند 0
إذا لم يكن هناك وسيطة ثانية، فإن slice
تستمر حتى نهاية السلسلة:
Let str = "stringify"; تنبيه( str.slice(2)); // 'ringify'، من المركز الثاني حتى النهاية
القيم السلبية start/end
ممكنة أيضًا. إنها تعني أن الموضع يتم حسابه من نهاية السلسلة:
Let str = "stringify"; // ابدأ في الموضع الرابع من اليمين، وانتهي في الموضع الأول من اليمين تنبيه( str.slice(-4, -1) ); // "جيف"
str.substring(start [, end])
إرجاع جزء السلسلة بين start
end
(لا يشمل end
).
هذا تقريبًا نفس slice
، لكنه يسمح بأن تكون start
أكبر من end
(في هذه الحالة تقوم ببساطة بتبديل قيم start
end
).
على سبيل المثال:
Let str = "stringify"; // هذه هي نفسها بالنسبة للسلسلة الفرعية تنبيه( str.substring(2, 6)); // "جرس" تنبيه( str.substring(6, 2)); // "جرس" // ...ولكن ليس للشريحة: تنبيه( str.slice(2, 6)); // "الرنين" (نفس الشيء) تنبيه( str.slice(6, 2)); // "" (سلسلة فارغة)
الوسائط السالبة (على عكس الشريحة) غير مدعومة، ويتم التعامل معها على أنها 0
.
str.substr(start [, length])
إرجاع جزء السلسلة من start
، length
المحدد.
وعلى النقيض من الطرق السابقة، تسمح لنا هذه الطريقة بتحديد length
بدلاً من موضع النهاية:
Let str = "stringify"; تنبيه( str.substr(2, 4)); // "الحلقة"، من المركز الثاني احصل على 4 أحرف
قد تكون الوسيطة الأولى سلبية، لنعد من النهاية:
Let str = "stringify"; تنبيه( str.substr(-4, 2) ); // 'gi'، من المركز الرابع احصل على حرفين
توجد هذه الطريقة في الملحق ب من مواصفات اللغة. وهذا يعني أن محركات Javascript المستضافة في المتصفح فقط هي التي يجب أن تدعمها، ولا يوصى باستخدامها. ومن الناحية العملية، فهو مدعوم في كل مكان.
دعونا نلخص هذه الطرق لتجنب أي لبس:
طريقة | يختار… | السلبيات |
---|---|---|
slice(start, end) | من start إلى end (لا يشمل end ) | يسمح بالسلبيات |
substring(start, end) | بين start end (لا يشمل end ) | القيم السلبية تعني 0 |
substr(start, length) | من start الحصول على أحرف length | يسمح start سلبية |
أي واحد تختار؟
كلهم يستطيعون القيام بهذه المهمة. رسميًا، لدى substr
عيب بسيط: لم يتم وصفها في مواصفات JavaScript الأساسية، ولكن في الملحق ب، الذي يغطي ميزات المتصفح فقط والتي توجد أساسًا لأسباب تاريخية. لذلك، قد تفشل البيئات غير المستعرضة في دعمها. ولكن في الممارسة العملية فإنه يعمل في كل مكان.
من بين المتغيرين الآخرين، تعتبر slice
أكثر مرونة قليلاً، فهي تسمح بالوسيطات السلبية وأقصر في الكتابة.
لذلك، للاستخدام العملي يكفي أن نتذكر slice
فقط .
كما نعلم من فصل المقارنات، تتم مقارنة السلاسل حرفًا بحرف بالترتيب الأبجدي.
على الرغم من أن هناك بعض الشذوذ.
دائمًا ما يكون الحرف الصغير أكبر من الحرف الكبير:
تنبيه('أ'> 'Z' ); // حقيقي
الحروف التي تحتوي على علامات التشكيل "خارجة عن الترتيب":
تنبيه( 'Österreich' > 'نيوزيلندا' ); // حقيقي
وقد يؤدي هذا إلى نتائج غريبة إذا قمنا بفرز أسماء هذه البلدان. عادةً ما يتوقع الناس أن تأتي Zealand
بعد Österreich
في القائمة.
لفهم ما يحدث، يجب أن ندرك أن السلاسل النصية في Javascript مشفرة باستخدام UTF-16. أي: كل حرف له رمز رقمي مطابق.
هناك طرق خاصة تسمح لك بالحصول على الحرف الخاص بالرمز والعودة:
str.codePointAt(pos)
إرجاع رقم عشري يمثل رمز الحرف في الموضع pos
:
// أحرف الحالة المختلفة لها رموز مختلفة تنبيه( "Z".codePointAt(0) ); // 90 تنبيه( "z".codePointAt(0) ); // 122 تنبيه( "z".codePointAt(0).toString(16) ); // 7a (إذا كنا بحاجة إلى قيمة سداسية عشرية)
String.fromCodePoint(code)
إنشاء حرف من خلال code
الرقمي الخاص به
تنبيه( String.fromCodePoint(90)); // ز تنبيه( String.fromCodePoint(0x5a)); // Z (يمكننا أيضًا استخدام قيمة سداسية عشرية كوسيطة)
الآن دعونا نرى الأحرف ذات الرموز 65..220
(الأبجدية اللاتينية وقليلًا إضافيًا) عن طريق إنشاء سلسلة منها:
دع str = ''; لـ (دع i = 65؛ i <= 220؛ i++) { str += String.fromCodePoint(i); } تنبيه (شارع)؛ // الإخراج: // ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~ € ‚ƒ„ // ¡¢ £¤¥¦§¨©ª«¬®¯°±²³´μ¶·¸¹»¼½¾¿ÀÁÂÂÄÅÆAÈÉÊËÌÍÎÏÐÐÑÒÓÔÕÖ×ØÙÚÛÜ
يرى؟ تبدأ الأحرف الكبيرة أولاً، ثم بعض الأحرف الخاصة، ثم الأحرف الصغيرة، و Ö
بالقرب من نهاية الإخراج.
الآن أصبح من الواضح لماذا a > Z
.
تتم مقارنة الأحرف بواسطة الكود الرقمي الخاص بهم. الرمز الأكبر يعني أن الشخصية أكبر. a
(97) أكبر من رمز Z
(90).
جميع الأحرف الصغيرة تتبع الأحرف الكبيرة لأن رموزها أكبر.
بعض الحروف مثل Ö
تختلف عن الأبجدية الرئيسية. هنا رمزه أكبر من أي شيء من a
إلى z
.
تعد الخوارزمية "الصحيحة" لإجراء مقارنات السلاسل أكثر تعقيدًا مما قد تبدو، لأن الحروف الهجائية تختلف باختلاف اللغات.
لذلك، يحتاج المتصفح إلى معرفة اللغة للمقارنة.
ولحسن الحظ، تدعم المتصفحات الحديثة معيار التدويل ECMA-402.
فهو يوفر طريقة خاصة لمقارنة السلاسل بلغات مختلفة، باتباع قواعدها.
يُرجع الاستدعاء str.localeCompare(str2) عددًا صحيحًا يشير إلى ما إذا كانت str
أقل أو تساوي أو أكبر من str2
وفقًا لقواعد اللغة:
يُرجع رقمًا سالبًا إذا كانت str
أقل من str2
.
يُرجع رقمًا موجبًا إذا كان str
أكبر من str2
.
إرجاع 0
إذا كانت متكافئة.
على سبيل المثال:
تنبيه( 'Österreich'.localeCompare('زيلاند') ); // -1
تحتوي هذه الطريقة في الواقع على وسيطتين إضافيتين محددتين في الوثائق، مما يسمح لها بتحديد اللغة (افتراضيًا مأخوذ من البيئة، يعتمد ترتيب الحروف على اللغة) وإعداد قواعد إضافية مثل حساسية حالة الأحرف أو يجب أن يكون "a"
و "á"
يتم التعامل معها بنفس الطريقة وما إلى ذلك.
هناك 3 أنواع من الاقتباسات. تتيح العلامات الخلفية للسلسلة امتداد أسطر متعددة وتضمين التعبيرات ${…}
.
يمكننا استخدام أحرف خاصة، مثل فاصل الأسطر n
.
للحصول على حرف، استخدم: []
أو at
الأسلوب.
للحصول على سلسلة فرعية، استخدم: slice
أو substring
.
لكتابة سلسلة بأحرف صغيرة/كبيرة، استخدم: toLowerCase/toUpperCase
.
للبحث عن سلسلة فرعية، استخدم: indexOf
، أو includes/startsWith/endsWith
لعمليات التحقق البسيطة.
لمقارنة السلاسل وفقًا للغة، استخدم: localeCompare
، وإلا فستتم مقارنتها برموز الأحرف.
هناك عدة طرق أخرى مفيدة في السلاسل:
str.trim()
- يزيل المسافات ("الاقتطاعات") من بداية السلسلة ونهايتها.
str.repeat(n)
– يكرر السلسلة n
مرات.
…والمزيد يمكن العثور عليه في الدليل.
تحتوي السلاسل أيضًا على طرق لإجراء البحث/الاستبدال بالتعبيرات العادية. لكن هذا موضوع كبير، لذا تم شرحه في قسم تعليمي منفصل بعنوان "التعبيرات العادية".
أيضًا، من المهم الآن معرفة أن السلاسل تعتمد على تشفير Unicode، وبالتالي توجد مشكلات في المقارنات. هناك المزيد حول Unicode في الفصل Unicode، String Internals.
الأهمية: 5
اكتب دالة ucFirst(str)
تُرجع السلسلة str
ذات الحرف الأول الكبير، على سبيل المثال:
ucFirst("john") == "John";
افتح صندوق الرمل مع الاختبارات.
لا يمكننا "استبدال" الحرف الأول، لأن السلاسل النصية في JavaScript غير قابلة للتغيير.
لكن يمكننا إنشاء سلسلة جديدة بناءً على السلسلة الموجودة، باستخدام الحرف الأول الكبير:
Let newStr = str[0].toUpperCase() + str.slice(1);
هناك مشكلة صغيرة رغم ذلك. إذا كانت str
فارغة، فإن str[0]
undefined
، وبما أن undefined
لا يحتوي على طريقة toUpperCase()
، فسوف نحصل على خطأ.
أسهل طريقة هي إضافة اختبار لسلسلة فارغة، مثل هذا:
الدالة ucFirst(str) { إذا (!str) قم بإرجاع str؛ إرجاع str[0].toUpperCase() + str.slice(1); } تنبيه (ucFirst("جون")); // جون
افتح الحل بالاختبارات في وضع الحماية.
الأهمية: 5
اكتب دالة checkSpam(str)
التي تُرجع true
إذا كانت str
تحتوي على "الفياجرا" أو "XXX"، وإلا فستكون false
.
يجب أن تكون الدالة غير حساسة لحالة الأحرف:
checkSpam('اشتري ViAgRA الآن') == صحيح checkSpam('مجاني xxxxxx') == صحيح checkSpam("الأرنب البريء") == خطأ
افتح صندوق الرمل مع الاختبارات.
لجعل البحث غير حساس لحالة الأحرف، دعنا نجعل السلسلة صغيرة ثم نقوم بالبحث:
وظيفة التحقق من البريد العشوائي (شارع) { Let LowerStr = str.toLowerCase(); إرجاع LowerStr.includes('الفياجرا') || LowerStr.includes('xxx'); } تنبيه( checkSpam('اشتر ViAgRA الآن') ); تنبيه( checkSpam('مجاني xxxxxx') ); تنبيه (checkSpam ("الأرنب البريء"))؛
افتح الحل بالاختبارات في وضع الحماية.
الأهمية: 5
قم بإنشاء دالة truncate(str, maxlength)
تتحقق من طول str
وإذا تجاوزت maxlength
- استبدل نهاية str
بحرف القطع "…"
لجعل طولها مساويًا لـ maxlength
.
يجب أن تكون نتيجة الدالة السلسلة المقتطعة (إذا لزم الأمر).
على سبيل المثال:
truncate("ما أود قوله حول هذا الموضوع هو:"، 20) == "ما أود قوله..." truncate("مرحبًا بالجميع!"، 20) == "مرحبًا بالجميع!"
افتح صندوق الرمل مع الاختبارات.
يجب أن يكون الحد الأقصى للطول هو maxlength
، لذلك نحتاج إلى قصه بشكل أقصر قليلاً، لإعطاء مساحة لقطع الحذف.
لاحظ أنه يوجد بالفعل حرف Unicode واحد لعلامة الحذف. هذه ليست ثلاث نقاط.
اقتطاع الدالة (ستر، أقصى طول) { العودة (str.length> maxlength)؟ str.slice(0, maxlength - 1) + '...' : str; }
افتح الحل بالاختبارات في وضع الحماية.
الأهمية: 4
لدينا تكلفة على شكل "$120"
. أي: علامة الدولار تظهر أولاً، ثم الرقم.
قم بإنشاء دالة extractCurrencyValue(str)
التي من شأنها استخراج القيمة الرقمية من هذه السلسلة وإعادتها.
المثال:
تنبيه( extractCurrencyValue('$120') === 120); // حقيقي
افتح صندوق الرمل مع الاختبارات.
الدالة extractCurrencyValue(str) { return +str.slice(1); }
افتح الحل بالاختبارات في وضع الحماية.