אובייקטי עוטף ב-JavaScript

אובייקטי עוטף ב-JavaScript

מאמר זה מסביר על אובייקטי עוטף ב-JavaScript.

YouTube Video

אובייקטים עוטפים

ל-JavaScript יש סוגים פרימיטיביים ואובייקטים לטיפול בהם (אובייקטים עוטפים).

סוגי פרימיטיבים

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

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

אובייקטי עוטף

כדי לתפעל סוגים פרימיטיביים, JavaScript יוצרת באופן זמני אובייקטי עיטוף (Object wrappers). אובייקטי עיטוף מכילים שיטות ומאפיינים עבור הסוגים הפרימיטיביים.

Number

1let numObject = new Number(42);   // Wrapper object
2
3console.log(typeof numObject);    // object
4console.log(numObject.valueOf()); // 42
5
6let numValue = Number(42);        // Return primitive value
7
8console.log(typeof numValue);     // number
9console.log(numValue);            // 42
  • Number הוא סוג אובייקט שעוטף את number הפרימיטיבי. על ידי יצירה מפורשת של אובייקט Number, ניתן לטפל במספרים כמו ב-number, אך בדרך כלל מומלץ להשתמש בסוג הפרימיטיבי number.

typeof numObject הוא "object", אך typeof 42 הוא "number".

  • יש לשים לב כי שימוש באופרטור new ליצירת אובייקט עיטוף חדש מניב תוצאה שונה מקריאה ל-Number כפונקציה. כאשר נקרא כפונקציה, מוחזר טיפוס number פרימיטיבי.

String

1let strObject = new String("Hello"); // Wrapper object
2
3console.log(typeof strObject);    // object
4console.log(strObject.valueOf()); // Hello
  • זהו סוג אובייקט שעוטף את string הפרימיטיבי. בשימוש באובייקט String, ניתן לגשת למאפיינים ושיטות של מחרוזות, אך בדרך כלל משתמשים במחרוזת פרימיטיבית string.

typeof strObject הוא "object", אך typeof "Hello" הוא "string".

  • בדומה ל-Number, קריאה ל-String כפונקציה מחזירה string פרימיטיבי.

Boolean

1let boolObject = new Boolean(true); // Wrapper object
2
3console.log(typeof boolObject);    // object
4console.log(boolObject.valueOf()); // true
  • זהו סוג אובייקט שעוטף את boolean הפרימיטיבי. ניתן גם ליצור אובייקט Boolean באופן מפורש, אך בדרך כלל משתמשים בסוג הפרימיטיבי boolean.

typeof boolObject הוא "object", אך typeof true הוא "boolean".

  • בדומה ל-Number, קריאה ל-Boolean כפונקציה מחזירה boolean פרימיטיבי.

BigInt

 1let bigIntObject = Object(9007199254740991n); // Wrapper object
 2
 3console.log(typeof bigIntObject);    // object
 4console.log(bigIntObject.valueOf()); // 9007199254740991n
 5
 6let bigIntValue = BigInt(9007199254740991);   // Return primitive BigInt
 7
 8console.log(typeof bigIntValue);     // bigint
 9console.log(bigIntValue);            // 9007199254740991n
10
11// Error
12let bigIntObject2 = new BigInt(9007199254740991n);
  • Objectを使ってBigIntのラッパーオブジェクトを生成できますが、通常はプリミティブ型のbigintを直接使うのが一般的です。

typeof bigIntObject"object"であるのに対し、typeof 9007199254740991n"bigint"です。

  • BigIntを関数として呼び出すとプリミティブなbigintを返しますが、new演算子をつけてBigIntのラッパーオブジェクトを生成することはできません。

Symbol

1let symObject = Object(Symbol("id")); // Wrapper object for Symbol
2
3console.log(typeof symObject);    // object
4console.log(symObject.valueOf()); //
  • אתה יכול להשתמש ב-Object כדי ליצור אובייקט עוטף עבור Symbol, אך בדרך כלל משתמשים ישירות בסוג הפרימיטיבי Symbol.

הבדלים בין סוגים פרימיטיביים לאובייקטי עיטוף

  • סוגים פרימיטיביים הם קלי משקל ויעילים בזיכרון, אך אין להם מאפיינים או שיטות ישירות. עם זאת, ב-JavaScript, גם בסוגים פרימיטיביים נוצרים אוטומטית אובייקטי עיטוף זמניים לפי הצורך כדי לספק שיטות ומאפיינים.
1let text = "Hello";
2
3// A temporary String object is created,
4// allowing access to the length property
5console.log(text.length);
  • אובייקטי עיטוף הם אובייקטים שנוצרים במפורש ויכולים להשפיע על זיכרון וביצועים, ולכן באופן כללי מומלץ להשתמש בסוגים פרימיטיביים.

סיכום

  • סוגים פרימיטיביים: סוגים קלים כמו number, string, boolean, null, undefined ו־symbol שאין להם מתודות ישירות.
  • אובייקטי מעטפת: אובייקטים כמו Number, String ו־Boolean שמומרים זמנית מסוגים פרימיטיביים.

תוכלו לעקוב אחר המאמר שלמעלה באמצעות Visual Studio Code בערוץ היוטיוב שלנו. נא לבדוק גם את ערוץ היוטיוב.

YouTube Video