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.