מחרוזת

כל קבוצת תווים – אותיות, מספרים, סמלים וכו' – בין קבוצה של סוגריים כפולים ("), סוגריים בודדים (') או קווים נטויים (‎`) היא רכיב פשוט של מחרוזת. כבר ראינו כמה דוגמאות למחרוזות בקורס הזה: המופעים של 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

כדי למנוע זאת, צריך להשתמש בתווי לוכסן הפוך (\) כדי להימנע מהפעלת הפונקציה:

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." }

שרשור

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

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

מחרוזות רגילות ומחרוזות תבנית

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

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 שמסומנים בסימן דולר ובסוגריים מסולסלים (${}). ברירת המחדל היא ש'מתבצעת אינטרפולציה' של placeholders האלה, כלומר התוצאה של הביטוי מחליפה את ה-placeholder במחרוזת הסופית.

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

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

הארגומנט הראשון של פונקציית תג מכיל מערך של ערכי מחרוזות, והארגומנטים הנותרים מגדירים את placeholders. מערך הערכים של המחרוזות נוצר על ידי 'פיצול' של המחרוזת המילולית של התבנית בכל placeholder שהוא מכיל. הרכיב הראשון במערך מכיל את כל התווים עד למשתנה החלופי הראשון, הרכיב השני מכיל את כל התווים שבין המשתנה החלופי הראשון לשני וכן הלאה. כל 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."

בדיקת ההבנה

איזה תו משמש לבריחה מתווים?

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

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

+
&
.