מחרוזות (strings) הן אחד מסוגי הנתונים הנפוצים ביותר ב-JavaScript. הן מייצגות רצף של תווים המשמשים לאחסון ומניפולציה של טקסט. הבנת אופן העבודה עם מחרוזות היא הכרחית לכל מפתח JavaScript.
במדריך זה נסקור היבטים שונים של עבודה עם מחרוזות ב-JavaScript, כולל יצירת מחרוזות, מניפולציה של מחרוזות, ושיטות נפוצות עם דוגמאות קוד.
למה יש צורך להשתמש במחרוזות?
מחרוזות משחקות תפקיד מרכזי בפיתוח אתרים ואפליקציות. בין היתר, הן משמשות עבור:
- קבלת קלט מהמשתמש (כמו טפסים ושאילתות חיפוש).
- הצגת תוכן דינמי כמו הודעות, כותרות ותוויות.
- תקשורת עם שרתים (למשל, שליחת נתוני JSON).
הבנת העבודה עם מחרוזות תסייע לכם בניהול ועריכת טקסט בצורה יעילה.
יצירת מחרוזות
בג'אווה סקריפט ניתן ליצור מחרוזות באמצעות גרשיים בודדים, גרשיים כפולים או backticks (הנקראים גם template literals). לכל שיטה יש את השימושים הספציפיים שלה.
שימוש בגרשיים בודדים או כפולים
הגרשיים הבודדים והכפולים הם ברי החלפה ליצירת מחרוזות.
let singleQuoteString = 'Hello, World!';
let doubleQuoteString = "Hello, World!";שימוש ב-Template Literals (Backticks)
Template literals, הכלולים בתוך backticks, מאפשרים יצירת מחרוזות מרובות שורות ואינטרפולציה של ביטויים באמצעות הסינטקס ${}. זו הגישה המועדפת עבור מחרוזות שכוללות משתנים או ביטויים:
let name = 'John';
let greeting = `Hello, ${name}!`;
console.log(greeting); // Output: Hello, John!
// ניתן לשלב כל ביטוי
let price = 799.99;
let tax = 0.17;
console.log(`Total: $${(price * (1 + tax)).toFixed(2)}`); // Total: $935.99
// מחרוזות מרובות שורות
let message = `This is a long message
that spans across multiple
lines.`;
console.log(message);מאפיינים ושיטות – Properties and Methods
מחרוזות ב-JavaScript מגיעות עם מגוון מאפיינים ושיטות המאפשרים עבודה קלה עם טקסט.
מאפיין האורך (length)
מאפיין length מחזיר את מספר התווים במחרוזת.
let message = 'Hello, World!';
console.log(message.length); // Output: 13גישה לתווים
ניתן לגשת לתווים במחרוזת באמצעות כתיב הסוגריים המרובעים או שיטת at(). שיטת at() תומכת גם באינדקס שלילי, המאפשר גישה לתווים מסוף המחרוזת:
let message = 'Hello, World!';
console.log(message[0]); // 'H'
console.log(message.at(0)); // 'H'
console.log(message.at(-1)); // '!' (תו אחרון)
console.log(message.at(-2)); // 'd' (תו לפני אחרון)שיטות (methods) לעבודה עם מחרוזות
JavaScript מספקת שיטות רבות ושימושיות למניפולציה של מחרוזות. הנה כמה מהשיטות הנפוצות ביותר:
()toUpperCase ו-()toLowerCase
שיטות אלו מחזירות את המחרוזת באותיות רישיות או קטנות בהתאמה.
let message = 'Hello, World!';
console.log(message.toUpperCase()); // 'HELLO, WORLD!'
console.log(message.toLowerCase()); // 'hello, world!'()includes, ()startsWith, ()endsWith
שיטות אלו בודקות האם מחרוזת מכילה, מתחילה, או מסתיימת בתת-מחרוזת מסוימת. הן מחזירות ערך בוליאני:
let message = 'Hello, World!';
console.log(message.includes('World')); // true
console.log(message.includes('world')); // false (רגיש לאותיות)
console.log(message.startsWith('Hello')); // true
console.log(message.endsWith('!')); // true()indexOf ו-()lastIndexOf
שיטת indexOf() מחזירה את המיקום של ההופעה הראשונה של ערך מבוקש. שיטת lastIndexOf() מחזירה את המיקום של ההופעה האחרונה. שתיהן מחזירות -1 אם הערך לא נמצא:
let message = 'Hello, World!';
console.log(message.indexOf('o')); // 4
console.log(message.lastIndexOf('o')); // 8
console.log(message.indexOf('xyz')); // -1 (לא נמצא)()slice ו-()substring
שתי השיטות מחלצות חלק ממחרוזת. ההבדל המרכזי הוא ש-slice() תומך באינדקסים שליליים (ספירה מהסוף), בעוד ש-substring() לא:
let message = 'Hello, World!';
console.log(message.slice(0, 5)); // 'Hello'
console.log(message.slice(7)); // 'World!'
console.log(message.slice(-6)); // 'orld!'
console.log(message.substring(0, 5)); // 'Hello'השיטה הישנה substr() הוצאה משימוש (deprecated) ויש להימנע ממנה. השתמשו ב-slice() או substring() במקום.
()replace ו-()replaceAll
שיטת replace() מחליפה את ההופעה הראשונה של ערך. שיטת replaceAll() (ES2021) מחליפה את כל ההופעות:
let message = 'Hello World, Hello JavaScript';
console.log(message.replace('Hello', 'Hi'));
// 'Hi World, Hello JavaScript' (רק התאמה ראשונה)
console.log(message.replaceAll('Hello', 'Hi'));
// 'Hi World, Hi JavaScript' (כל ההתאמות)()split
שיטת split() מפרקת מחרוזת ל-מערך של תתי-מחרוזות.
let message = 'Hello, World!';
let words = message.split(' ');
console.log(words); // ['Hello,', 'World!']
let csv = 'apple,banana,cherry';
let fruits = csv.split(',');
console.log(fruits); // ['apple', 'banana', 'cherry']()trim, ()trimStart, ()trimEnd
שיטות אלו מסירות רווחים מהמחרוזת:
let message = ' Hello, World! ';
console.log(message.trim()); // 'Hello, World!'
console.log(message.trimStart()); // 'Hello, World! '
console.log(message.trimEnd()); // ' Hello, World!'()padStart ו-()padEnd
שיטות אלו מרפדות מחרוזת לאורך נתון עם תו מסוים. שימושי לעיצוב:
let num = '5';
console.log(num.padStart(3, '0')); // '005'
console.log(num.padEnd(3, '0')); // '500'
let price = '9.99';
console.log(price.padStart(8)); // ' 9.99' (מרופד ברווחים)שיטות נפוצות בעבודה עם מחרוזות JavaScript
הנה טבלה המסכמת כמה מהשיטות הנפוצות ביותר לעבודה עם מחרוזות:
| שיטה | תיאור | דוגמה |
|---|---|---|
toUpperCase() | ממיר את כל האותיות במחרוזת לאותיות רישיות. | "hello".toUpperCase() -> "HELLO" |
includes() | בודק אם מחרוזת מכילה תת-מחרוזת. | "hello".includes("ell") -> true |
slice() | מחלץ חלק ממחרוזת (תומך באינדקס שלילי). | "hello".slice(1, 4) -> "ell" |
replaceAll() | מחליף את כל ההופעות של ערך. | "aaba".replaceAll("a", "x") -> "xxbx" |
split() | מפריד מחרוזת למערך לפי תו נתון. | "a,b,c".split(",") -> ["a", "b", "c"] |
trim() | מסיר רווחים מהקצוות. | " hi ".trim() -> "hi" |
at() | גישה לתו (תומך באינדקס שלילי). | "hello".at(-1) -> "o" |
הדבקת מחרוזות + concat
הדבקת מחרוזות היא תהליך של חיבור שתי מחרוזות או יותר. ניתן לעשות זאת באמצעות האופרטור + או על ידי שימוש ב-concat():
let greeting = 'Hello';
let name = 'John';
// שימוש באופרטור +
let message = greeting + ', ' + name + '!';
console.log(message); // 'Hello, John!'
// שימוש בשיטת concat()
let anotherMessage = greeting.concat(', ', name, '!');
console.log(anotherMessage); // 'Hello, John!'עבור מחרוזות שכוללות משתנים או ביטויים, template literals (
`Hello, ${name}!`) מועדפים על פני הדבקה מכיוון שהם קריאים יותר ופחות מועדים לטעויות.
תווים מיוחדים
תווים מיוחדים משמשים להכללת תווים ייחודיים במחרוזת. התווים הנפוצים כוללים:
nעבור שורה חדשהtעבור טאבעבור סלאש הפוך'עבור גרש יחיד"עבור גרש כפול
let message = 'First linenSecond line';
console.log(message);
// Output:
// First line
// Second lineטעויות נפוצות של מתחילים
הנה כמה טעויות נפוצות שמפתחים מתחילים עושים בעת עבודה עם מחרוזות:
1. ערבוב בין גרשיים בודדים לכפולים:
חשוב לבחור בסוג גרש אחד או לבצע escaping לתווים כשמשתמשים בשניהם יחד.
// שגוי
let text = 'It's sunny today'; // Error: Unexpected token
// נכון
let text1 = "It's sunny today";
let text2 = 'It's sunny today';
let text3 = `It's sunny today`; // Template literal - ללא צורך ב-escaping2. מחרוזות הן בלתי ניתנות לשינוי (Immutable):
כל פעולה על מחרוזת מחזירה מחרוזת חדשה ולא משנה את המקורית.
let str = 'hello';
let newStr = str.toUpperCase();
console.log(str); // 'hello' (נותרה ללא שינוי)
console.log(newStr); // 'HELLO'השוואת מחרוזות
ניתן להשוות מחרוזות באמצעות אופרטורי השוויון (== ו-===). תמיד העדיפו השוואה מחמירה (===) כדי למנוע המרת סוגים:
let str1 = 'hello';
let str2 = 'hello';
let str3 = 'world';
console.log(str1 === str2); // true
console.log(str1 === str3); // falseלמיון אלפביתי תוך התחשבות בשפה, השתמשו ב-localeCompare():
'apple'.localeCompare('banana'); // -1 (apple בא לפני banana)
'banana'.localeCompare('apple'); // 1
'apple'.localeCompare('apple'); // 0שיעורי בית
הנה מספר תרגולים שיעזרו לכם להבין טוב יותר את העבודה עם מחרוזות JavaScript:
- צרו מחרוזת עם שמכם וגילכם בעזרת
template literals. - מצאו את המיקום הראשון והאחרון של האות 'a' במחרוזת
"banana". - הפכו את המחרוזת
" learn JavaScript! "ל-"Learn JavaScript!"בעזרת שיטות מתאימות.
לדוגמה, כך תפתרו את התרגיל השלישי:
let str = ' learn JavaScript! ';
let result = str.trim().replace('learn', 'Learn');
console.log(result); // 'Learn JavaScript!'שאלות נפוצות
שאלות נפוצות בנושא מחרוזות ב-JavaScript:
'') וגרשיים כפולים ("") עובדים באופן זהה ליצירת מחרוזות בסיסיות. Backticks (``) יוצרים template literals שתומכים במחרוזות מרובות שורות ואינטרפולציה של ביטויים עם ${expression}. השתמשו ב-backticks כשהמחרוזת כוללת משתנים או משתרעת על מספר שורות. למחרוזות פשוטות, גרשיים בודדים או כפולים מתאימים - רק שמרו על עקביות.slice() ל-substring()?
slice() תומך באינדקסים שליליים (ספירה מהסוף), בעוד ש-substring() לא. לדוגמה, "hello".slice(-3) מחזיר "llo", אך substring() תתייחס לערכים שליליים כ-0. ברוב המקרים, slice() היא הבחירה המועדפת בגלל הגמישות שלה. השיטה הישנה substr() הוצאה משימוש ואין להשתמש בה.replaceAll() שהוצגה ב-ES2021. לדוגמה, "hello world hello".replaceAll("hello", "hi") מחזיר "hi world hi". לפני replaceAll(), היה צורך להשתמש ב-replace() עם ביטוי רגולרי ודגל גלובלי: str.replace(/hello/g, "hi"). replaceAll() פשוטה ובטוחה יותר, במיוחד עם קלט משתמש שעלול להכיל תווים מיוחדים של regex.toUpperCase(), replace(), trim()) מחזירות מחרוזת חדשה במקום לשנות את המקורית. לדוגמה, לאחר let str = 'hello'; str.toUpperCase();, str עדיין 'hello'. צריך להקצות את התוצאה למשתנה: let upper = str.toUpperCase();.includes(): "Hello World".includes("World") מחזיר true. שימו לב ש-includes() רגיש לאותיות גדולות/קטנות, כך ש-"Hello".includes("hello") מחזיר false. לבדיקה ללא רגישות לאותיות, המירו את שתי המחרוזות לאותו מקרה קודם: str.toLowerCase().includes("hello"). ניתן גם להשתמש ב-startsWith() ו-endsWith() לבדיקת התחלה או סוף בלבד.at() ולמה כדאי להשתמש בה?
at() ניגשת לתו באינדקס נתון, ובניגוד לכתיב סוגריים, היא תומכת באינדקסים שליליים. "hello".at(-1) מחזיר "o" (התו האחרון), בעוד ש-"hello"[-1] מחזיר undefined. זה הופך את at() לשימושית כאשר צריך לגשת לתווים מסוף המחרוזת ללא חישוב האינדקס ידנית.לסיכום
מחרוזות הן חלק בסיסי בתכנות ב-JavaScript. עם שיטות כמו includes(), replaceAll(), slice(), ו-template literals, ניתן לבצע מגוון רחב של פעולות על מחרוזות ביעילות.
למדריכים נוספים על יסודות JavaScript, עיינו במדריכים על משתנים וקבועים, מערכים, פונקציות, ו-אובייקטים.

