Object.prototype.propertyIsEnumerable()‎

من موسوعة حسوب

الدالة Object.prototype.propertyIsEnumerable()‎ تُعيد قيمةً منطقيةً تبيّن إن كان الخاصيةُ قابلةً للإحصاء أم لا.

البنية العامة

obj.propertyIsEnumerable(prop)

prop

اسم الخاصية التي سنختبرها.

القيمة المعادة

قيمة منطقية Boolean تُشير إذا كانت الخاصية قابلةً للإحصاء أم لا.

الوصف

كل كائن ينحدر من الكائن Object يرث الدالة propertyIsEnumerable، ويمكن أن تُستخدَم هذه الدالة لتحديد إن كانت إحدى الخاصيات قابلةٌ للإحصاء وستُعرضَ في حلقة for...in؛ باستثناء الخاصيات التي يرثها الكائن من سلسلة prototype، وإذا لم يملك الكائن الخاصية المُحدَّدة فستُعيد الدالةُ القيمةَ false.

أمثلة

معرفة إن كانت الخاصية قابلةً للإحصاء

المثال الآتي يبيّن استخدام الدالة propertyIsEnumerable على الكائنات والمصفوفات:

var o = {};
var a = [];
o.prop = 'is enumerable';
a[0] = 'is enumerable';

o.propertyIsEnumerable('prop');   // true
a.propertyIsEnumerable(0);        // true

الفرق بين الخاصيات التي عرفها المستخدم والمضمنة في اللغة

المثال الآتي يبيّن الفرق بين قابلية إحصاء الخاصيات التي عرَّفها المستخدم والخاصيات المُضمَّنة في اللغة:

var a = ['is enumerable'];

a.propertyIsEnumerable(0);             // true
a.propertyIsEnumerable('length');      // false

Math.propertyIsEnumerable('random');   // false
this.propertyIsEnumerable('Math');     // false

الفرق بين الخاصيات المباشرة والموروثة

يبيّن المثال الآتي أنَّ الدالة propertyIsEnumerable لا تعمل إلا على الخاصيات التي يملكها الكائن مباشرةً، ولن تعمل على الخاصيات الموروثة عبر سلسلة prototype:

var a = [];
a.propertyIsEnumerable('constructor');         // false

function firstConstructor() {
  this.property = 'is not enumerable';
}

firstConstructor.prototype.firstMethod = function() {};

function secondConstructor() {
  this.method = function method() { return 'is enumerable'; };
}

secondConstructor.prototype = new firstConstructor;
secondConstructor.prototype.constructor = secondConstructor;

var o = new secondConstructor();
o.arbitraryProperty = 'is enumerable';

o.propertyIsEnumerable('arbitraryProperty');   // true
o.propertyIsEnumerable('method');              // true
o.propertyIsEnumerable('property');            // false

o.property = 'is enumerable';

o.propertyIsEnumerable('property');            // true

o.propertyIsEnumerable('prototype');           // false
o.propertyIsEnumerable('constructor');         // false
o.propertyIsEnumerable('firstMethod');         // false

دعم المتصفحات

الميزة Chrome Firefox Internet Explorer Opera Safari
الدعم الأساسي نعم نعم نعم نعم نعم

مصادر ومواصفات