Object.prototype.propertyIsEnumerable()

El m茅todo propertyIsEnumerable() regresa un Boleano indicando si la propiedad especificada es enumerable.

Sintaxis

obj.propertyIsEnumerable(prop)

Parametros

prop
Nombre de la propiedad a probar.

Descripci贸n

Todos los objetos tienen un m茅todo propertyIsEnumerable. Este m茅todo puede determinar si la propiedad especificada en el objeto puede ser enumerada por un ciclo for...in, con la excepci贸n de propiedades heredadas a trav茅s de prototype. Si el objeto no tiene la propiedad especificada, este m茅todo regresa un valor false.

Ejemplo

Uso b谩sico de propertyIsEnumerable

El siguiente ejemplo muestra el uso de propertyIsEnumerable en objetos y arrays:

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

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

Definidas por usuario vs predefinidas

El siguiente ejemplo demuestra la enumerabilidad de las propiedades definidas por el usuario contra las predefinidas:

var a = ['es enumerable'];

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

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

Directa vs  heredadas

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

function primerConstructor() {
  this.propiedad = 'no es enumerable';
}

primerConstructor.prototype.primerMetodo = function() {};

function segundoConstructor() {
  this.metodo = function() { return 'es enumerable'; };
}

secondConstructor.prototype = new primerConstructor;
secondConstructor.prototype.constructor = segundoConstructor;

var o = new segundoConstructor();
o.propiedadArbitraria = 'is enumerable';

o.propertyIsEnumerable('propiedadArbitraria ');   // regresa true
o.propertyIsEnumerable('metodo');                 // regresa true
o.propertyIsEnumerable('propiedad');              // regresa false

o.propiedad = 'es enumerable';

o.propertyIsEnumerable('propiedad');              // regresa true

// Regresan false por estar en el prototipo el cual no es
// considerado por propertyIsEnumerable (a pesar de que las dos ultimas son
// iterables con un for-in)
o.propertyIsEnumerable('prototype');   // regresa false (como en JS 1.8.1/FF3.6)
o.propertyIsEnumerable('constructor'); // regresa false
o.propertyIsEnumerable('firstMethod'); // regresa false

Especificaciones

Especificaci贸n Estatus Comentario
ECMAScript 3rd Edition (ECMA-262) Standard Definici贸n inicial.
ECMAScript 5.1 (ECMA-262)
La definici贸n de 'Object.prototype.propertyIsEnumerable' en esta especificaci贸n.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
La definici贸n de 'Object.prototype.propertyIsEnumerable' en esta especificaci贸n.
Standard  

Compatibilidad de navegadores

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help! (en-US)
Caracter铆stica Chrome Firefox (Gecko) Internet Explorer Opera Safari
Soporte b谩sico (Yes) (Yes) (Yes) (Yes) (Yes)
Caracter铆stica Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Soporte b谩sico (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

Notas espec铆ficas para Gecko

Al inicio de JavaScript 1.8.1 (in Firefox 3.6), propertyIsEnumerable('prototype') regresa false en lugar de true; esto hace que el resultado cumpla con la especificaci贸n de ECMAScript 5.

V茅ase tambi茅n