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 |
---|---|---|---|---|---|
الدعم الأساسي | نعم | نعم | نعم | نعم | نعم |
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).
- معيار ECMAScript 5.1.
- معيار ECMAScript 3rd Edition.