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
Specification |
---|
ECMAScript Language Specification # sec-object.prototype.propertyisenumerable |
Compatibilidad con navegadores
BCD tables only load in the browser
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.