מחרוזת

כל קבוצת תווים – אותיות, מספרים, סמלים וכו' – בין קבוצה של סוגריים כפולים ("), סוגריים בודדים (') או קווים נטויים (‎`) היא רכיב פשוט של מחרוזת. כבר ראיתם כמה דוגמאות למחרוזות בקורס הזה: המופעים של console.log במודול הקודם פרימיטיביים של מחרוזות.

console.log( "Hello, World." );
> Hello, World.

"Hello, World." הוא רכיב של מחרוזת. מקבלים את אותה תוצאה עם מירכאות או סימני הטעמה משנית:

console.log( 'Hello, World.' );
> Hello, World.

console.log(`Hello, World.`);
> Hello, World.

רצף של תווים שמוקפים במרכאות נקרא מחרוזת לטינית. מירכאות כפולות ויחידות פועלות באותו אופן, ואחת מהן יכולה להכיל את השנייה כתו במחרוזת עצמה:

console.log( "I'm a string." );
> I'm a string.

console.log( '"A string," I said.' );
> "A string," I said.

מופע של אותו תו סוגר בתוך המחרוזת 'סוגר' את המחרוזת, וכנראה גורם לשגיאות:

console.log( '"I'm a string," I said.' );
> Uncaught SyntaxError: missing ) after argument list

כדי למנוע זאת, צריך לסמן את התו בתווי בריחה (escape) באמצעות לוכסן הפוך (/):

console.log( '"I\'m a string," I said.' );
> "I'm a string," I said.

אובייקט מחרוזת

כשהאובייקט String נקרא כפונקציה, הוא מאלף ערך מוגדר ליטרל מחרוזת.

let myString = String( 10 );

myString
> "10"

typeof myString
> string

כפי שמתואר בקטע ירושה מבוססת-אב טיפוס, רק לעיתים רחוקות תצטרכו להשתמש באובייקט String כ-constructor. הוא יוצר מחרוזת שמכילה את הערך שצוין, לצד השיטות ו- מאפיינים שכבר נתמכים על ידי האובייקט String, במקום ליטרל מחרוזת.

let stringObj = new String( "My new string." );

typeof stringObj
> object

stringObj
> String { "My new string." }

שרשור

בשימוש בהקשר של מחרוזות במקום מספרים, יש סימן פלוס יחיד (+) משמש כאופרטור שרשור שמשלב כמה ערכי מחרוזת string:

console.log( "My" + " string." );
> My string.

ליטרלים של מחרוזת וליטרל תבניות

אפשר להשתמש לסירוגין במירכאות, במירכאות כפולות ובמירכאות כפולות ויוצר פרימיטיביים של מחרוזות. אבל אפשר להשתמש גם בגרשיים, כדי לציין תבניות מילוליות (נקראות לפעמים 'מחרוזות תבנית'). בניגוד ל- ליטרל מחרוזת שנוצר על ידי מירכאות בודדות או כפולות, ליטרלים של תבניות מאפשרים למחרוזות מרובות שורות ואינטרפולציה של מחרוזות.

const myString = "This
is a string.";
> Uncaught SyntaxError: "" string literal contains an unescaped line break

const myString = `This
is a string.`;

console.log( myString );

> This
is a string.

הטקסטים של התבניות יכולים להכיל ביטויי placeholder שמסומנים בסימן דולר וסוגריים מסולסלים (${}). ערכי ה-placeholder האלה הם "אינטרפולציה" כברירת מחדל, כלומר, התוצאה של הביטוי מחליפה את ה-placeholder String.

console.log( "The result is " + ( 2 + 4 ) + "." );
> The result is 6.
console.log( `The result is ${ 2 + 4 }.` );
> The result is 6.

אפשר להעביר את מילת המפתח של התבנית אל פונקציה מותאמת אישית כדי ליצור תבנית מתויגת, קריאה לפונקציה שמשתמשת בתבנית אחת שאלה מילולית כקבוצת ארגומנטים ומאפשרת ל-placeholders שלה לאכלס אותה על סמך של לוגיקה מוגדרת על ידי המחבר.

הארגומנט הראשון של פונקציית תג מכיל מערך של ערכי מחרוזת, הארגומנטים הנותרים מגדירים את ערכי ה-placeholder. המערך הזה של ערכי מחרוזת נוצר באמצעות "splitting" מילת המפתח של התבנית בכל placeholder שהיא מכילה. הרכיב הראשון במערך מכיל תווים כלשהם עד ל-placeholder הראשון, הרכיב השני מכיל תווים בין הרכיב הראשון לשני placeholders וכו'. כל placeholder מועבר לפונקציית התג עצמאי עם placeholder משויך.

const myNoun = "template literal";

function myTagFunction( myStrings, myPlaceholder ) {
    const myInitialString = myStrings[ 0 ];
    console.log( `${ myInitialString }modified ${ myPlaceholder }.` );
}

myTagFunction`I'm a ${ myNoun }.`;
> "I'm a modified template literal."

בדיקת ההבנה

איזה תו משמש בתו בריחה (escape)?

לוכסן הפוך ()
מירכאות כפולות (")
קו נטוי קדימה (/)

איזה תו משמש לשרשור?

+
&
.