كائنات التفاف في 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.۔ يرجى التحقق من القناة على YouTube أيضًا.۔