אובייקטי עוטף ב-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 בערוץ היוטיוב שלנו. נא לבדוק גם את ערוץ היוטיוב.