¿Qué significa cuando la propiedad de un objeto se desvanece ligeramente cuando se usa console.dir() en la consola de Chrome?
Por ejemplo, eche un vistazo a "superior, ancho, mundo visible, x e y" en esta captura de pantalla.

Miré la referencia de la API aquí https://developer.chrome.com/devtools/docs/console-api#consoledirobject , pero no tuve suerte.
Gracias
Aparecen propiedades atenuadas para indicar propiedades no enumerables. Si hacemos:
var a = {}; Object.defineProperties(a, { hello: { enumerable: false }, world: { enumerable: true } }); console.dir(a); luego vemos que hello se desvanece, mientras que world no lo es.

En su código, si hace for(prop in obj) { console.log(prop); } (donde obj es el objeto que nos está mostrando en la captura de pantalla de su consola), verá que solo las propiedades atenuadas no se enumeran.
También puede verificar esto con Object.getOwnPropertyDescriptor(obj, "worldVisible") , que debería devolver un objeto con una propiedad enumerable: false .
Tenga en cuenta que las cursivas en los nombres de las propiedades indican que el valor de la propiedad está definido por una función getter. (Esto también hace que el valor muestre un valor (...) antes de que se ejecute la función). Este es un problema totalmente independiente de la enumerabilidad, lo que hace que los nombres se desvanezcan. Puede tener propiedades definidas por captadores en cursiva que no sean propiedades atenuadas no enumerables, y viceversa.
No he podido encontrar en la documentación ninguna explicación oficial, pero tengo una buena suposición basada en algunas pruebas de que los atributos atenuados son los que están predeterminados/establecidos por el motor de Javascript y no por el código en sí. Aquí hay unos ejemplos:
length en una matriz var foo = [1,2,3,45,1337]; console.dir(foo);Da en la consola:

Tenga en cuenta que los índices no están atenuados, pero la length y todo en __proto__ .
El código de https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype#Examples
var Person = function() { this.canTalk = true; }; Person.prototype.greet = function() { if (this.canTalk) { console.log('Hi, I am ' + this.name); } }; var Employee = function(name, title) { Person.call(this); this.name = name; this.title = title; }; Employee.prototype = Object.create(Person.prototype); Employee.prototype.constructor = Employee; Employee.prototype.greet = function() { if (this.canTalk) { console.log('Hi, I am ' + this.name + ', the ' + this.title); } }; var bob = new Employee('Bob', 'Builder'); bob.greet(); console.dir(bob);Da en la consola:

Hay muchas cosas interesantes aquí. Todas las instancias de greet no están atenuadas. Sin embargo, en todas partes __proto__ está atenuado (probablemente porque el motor lo establece en su prototipo). Además, el constructor anulado de Person está atenuado, pero el constructor establecido explícitamente de Employee no está atenuado.
Así que creo que hay un patrón aproximado aquí, que es que Chrom(e/ium) oscurece las propiedades que cree que es menos probable que le importen, ya sea porque fueron heredadas o establecidas por el motor como una construcción. del lenguaje, pero parece que no es perfecto. (Pero, ¿quién es, verdad?) Otra cosa interesante que puedes probar es presionar F12 y escribir console.dir(window) . Allí verá casi todo atenuado, excepto las cosas que Javascript del sitio web coloca en el espacio de nombres de la ventana global.