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

YouTube Video