اذهب إلى المحتوى

السؤال

نشر

كنت أقرأ عن التابع Object.defineProperty ووجدت جزء لم أفهمه، وهو أن هذا التابع يقوم بإضافة خاصية إلى الكائن Object ولكن هذه الخاصية تكون غير قابلةً للإحصاء non-enumerable property، بينما إستخدام الطرق العادية لإسناد خاصية إلى كائن ما تجعل الخاصية قابلةً للإحصاء enumerable properties

var obj = {};

Object.defineProperty(obj, 'a', {
  value: 123
}); // خاصية غير قابلة للإحصاء

obj.b = 4; // خاصية قابلة للإحصاء لأننا أنشأناها عبر
         // إسناد قيمة إلى خاصية مباشرةً

ما الفرق بين  الخصائص القابلةً للإحصاء enumerable properties والخصائص الغير قابلةً للإحصاء non-enumerable properties في JavaScript؟

Recommended Posts

  • 1
نشر

الخصائص القابلة للإحصاء يمكن الحصول عليها عند مناداة الدالة Object.keys(obj)  بينما الغير قابلة للإحصاء لن تظهر, بالإضافة إلى أننا عند عبورنا على خصائص الكائن من خلال for in  لن تظهر لنا إلا الخصائص القابلة للإحصاء فقط, ويمكننا فهم الأمر بشكلٍ أكبر عبر الأمثلة التالية 

var obj = {};

Object.defineProperty(obj, 'a', {
  value: 123
}); // خاصية غير قابلة للإحصاء

obj.b = 4; // خاصية قابلة للإحصاء لأننا أنشأناها عبر
         // إسناد قيمة إلى خاصية مباشرةً
console.log(Object.keys(obj))////هنا لن تظهر لنا إلا الخاصية b فقط

for(key in obj)
	console.log(key)//هنا لن يتم طباعة أيضًا إلا الخاصية b فقط

وتلك الخصائص يمكننا الإستفادة منها في عدة أمور كمثال عند محاولتنا لتحويل الكائن لديك إلى مصفوفة, يمكننا إستخدام الشفرة التالية 

const arr = Object.keys(obj).map(key=>obj[key])

في تلك الحالة لن يتم تحويل الخواص التي ليست قابلة للإحصاء وذلك لأنها لن تظهر لنا في التابع Object.keys , لذا يُستحسن دومًا محاولة التعامل مع الخواص القابلة للإحصاء بدلًا من الغير قابلة إلا في حالة أنك أردت وضع خاصية لا تظهر في الحالات التي ذكرناها

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...