Me dirigieron a MDN para ... en la página cuando decía: "para ... en Itera sobre las propiedades enumerables de un objeto".
Luego fui a la página Enumerabilidad y propiedad de propiedades donde decía "Las propiedades enumerables son aquellas que pueden iterarse mediante un bucle for..in".
El diccionario define enumerable como contable, pero realmente no puedo visualizar lo que eso significa. ¿Puedo obtener un ejemplo de algo enumerable?
javascript
enumerable
Patricio
fuente
fuente
for-in
hace?for in
bucle o no (para aquellos que no quieren conocer los detalles o simplemente no les importa;))Respuestas:
Una propiedad enumerable es aquella que se puede incluir y visitar durante los
for..in
bucles (o una iteración similar de propiedades, comoObject.keys()
).Si una propiedad no se identifica como enumerable, el bucle ignorará que está dentro del objeto.
Una propiedad se identifica como enumerable o no por su propio
[[Enumerable]]
atributo . Puede ver esto como parte del descriptor de la propiedad :for..in
Luego, un bucle itera a través de los nombres de propiedad del objeto.Pero, solo evalúa su declaración,
console.log(prop);
en este caso, para aquellas propiedades cuyo[[Enumerable]]
atributo estrue
.Esta condición está en su lugar porque los objetos tienen muchas más propiedades , especialmente de herencia :
Cada una de estas propiedades todavía existe en el objeto :
Pero, se saltan por el
for..in
ciclo porque no son enumerables.fuente
But, they are skipped (or not counted) by the for..in loop because they are not enumerable
. De hecho, las propiedades enObject.prototype
se ignoran porque están más arriba en la cadena de prototipos, no porque no sean enumerables. NigetOwnPropertyNames()
okeys()
mostrar propiedades que no son un objeto de cuenta. Como nota al margen, es cierto que muchas de las propiedades incorporadas no son enumerables y, por lo tanto, no se mostrarán conkeys()
, pero tendrá que escribir código adicional si desea atravesar la cadena de prototipos.Si crea un objeto vía
myObj = {foo: 'bar'}
o algo por el estilo, todas las propiedades son enumerables. Entonces, la pregunta más fácil es: ¿qué no es enumerable? Ciertos objetos tienen algunas propiedades no enumerables, por ejemplo, si llamaObject.getOwnPropertyNames([])
(que devuelve una matriz de todas las propiedades, enumerables o no, en []), devolverá['length']
, que incluye la propiedad no enumerable de una matriz, 'longitud' .Puede hacer sus propias propiedades no enumerables llamando a
Object.defineProperty
:Este ejemplo se basa en gran medida en propiedades no enumerables en JavaScript , pero muestra un objeto que se enumera. Las propiedades pueden ser o no escribibles, configurables o enumerables. John Resig analiza esto en el ámbito de los objetos y propiedades de ECMAScript 5 .
Y, hay una pregunta acerca de desbordamiento de pila por qué te gustaría siempre quiere hacer las propiedades no numerable .
fuente
Es mucho más aburrido que algo que debería visualizarse.
Literalmente hay un atributo en todas las propiedades llamado "enumerable". Cuando se establece en falso, el
for..in
método omitirá esa propiedad, pretenda que no existe.Hay muchas propiedades en los objetos que tienen "enumerable" establecido en falso, como "valueOf" y "hasOwnProperty", porque se presume que no desea que el motor de JavaScript itere sobre ellos.
Puede crear sus propias propiedades no enumerables utilizando el
Object.defineProperty
método:Ahora, el hecho de que incluso hay un secreto sobre el automóvil está oculto. Por supuesto, aún pueden acceder a la propiedad directamente y obtener la respuesta:
Pero, tendrían que saber que la propiedad existe primero, porque si están intentando acceder a ella
for..in
oObject.keys
permanecerá completamente en secreto:Deberían haberlo llamado "forInAble".
fuente
Si tiene dificultades para visualizar "¿qué significa ser enumerable?" ¿Por qué no te preguntas, qué significa ser no numerable ?
Pienso un poco así, existe una propiedad no enumerable pero está parcialmente oculta ; lo que significa que no es enumerable es el extraño. Ahora puede imaginar lo enumerable como lo que queda: la propiedad más natural a la que estamos acostumbrados desde que descubrimos los Objetos . Considerar
Ahora en un
for..in
, imagínelo como pseudocódigodonde el cuerpo del bucle que escribió en JavaScript está en el lugar de
/* whatever */
fuente
Escribiré una definición de línea de ENUMERABLE
Enumerable
: Especifica si la propiedad se puede devolver en un bucle for / in.fuente
los métodos no son enumerables; o mejor dicho, los métodos incorporados no son .. después de buscar lo que significa enumerable para el script java; solo se refiere a un atributo de propiedad ... todos los objetos creados en ecma3 son enumerables, y ecma5 ahora puede definirlo ... eso es todo ...: D lol me tomó un poco encontrar la respuesta; pero creo que se menciona en el libro de David Flanagan ... así que supongo que significa "oculto", o no "oculto", ya que los métodos no se muestran en el ciclo for in, y por lo tanto están "ocultos"
fuente
Piense en el tipo de datos enum, solo una estructura de objetos que corresponden a diferentes números. Declarar algo como enumerable es declarar que corresponde a un número específico, lo que le permite tener un lugar en un Diccionario que representa componentes contables de un objeto. En pocas palabras, hacer que un objeto sea enumerable es lo mismo que decirle al compilador: "Oye, esta propiedad cuenta, quiero ver esto cuando verifico los datos de este objeto".
fuente
Los métodos integrados que heredan los objetos no son enumerables, pero las propiedades que su código agrega a los objetos son enumerables a menos que se indique explícitamente
fuente