كائنات التفاف في 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 أيضًا.۔