Skip to content

Instantly share code, notes, and snippets.

@a0viedo
Created July 18, 2015 13:18
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save a0viedo/14545cc60b2730e04b49 to your computer and use it in GitHub Desktop.
Save a0viedo/14545cc60b2730e04b49 to your computer and use it in GitHub Desktop.

Objetos y sus keys

Sabemos que un objeto es una "bolsa" de keys (propiedades) y values (valores). Por ejemplo si ejecutamos el siguiente código:

var obj = { a: 1 };
console.log(Object.keys(obj)); // [ "a" ]

podemos entender que Object.keys nos retorna un array con los keys que contiene el objeto que recibe por parámetro. A su vez, un objeto puede poseer propiedades pero éstas estar definidas para que no sean enumerables. Una propiedad no-enumerable no es recorrida con loops for...in y no es considerada por Object.keys. La forma de definir propiedades no-enumerables es con Object.defineProperty. Se puede saber también si una propiedad es enumerable usando Object.prototype.propertyIsEnumerable, por ejemplo:

console.log(Object.keys(Math)); // []
console.log(Math.propertyIsEnumerable('random')); // false
console.log(Object.getOwnPropertyNames(Math)); // ["E", "LN10", "LN2", "LOG2E", "LOG10E", "PI", "SQRT1_2", "SQRT2", "random", "abs", "acos", "asin", "atan", "ceil", "cos", "exp", "floor", "log", "round", "sin", "sqrt", "tan", "atan2", "pow", "max", "min", "imul", "sign", "trunc", "sinh", "cosh", "tanh", "asinh", "acosh", "atanh", "log10", "log2", "hypot", "fround", "clz32", "cbrt", "log1p", "expm1"]

Por lo tanto, si queremos obtener todas las propiedades de un objeto, ya sean enumerables o no, debemos utilizar Object.getOwnPropertyNames. Si lo aplicamos a un array vacío:

console.log(Object.getOwnPropertyNames([])); // ["length"]
console.log([].forEach); // function forEach() { [native code] }

Entonces, ¿dónde reside la función forEach? ¿Cuando se setea en el array vacío?¿Pertenece realmente al array vacío?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment