Il debugger non può sapere se un oggetto è stato modificato, questo è il motivo per cui il rendering dell'attributo posts
(nel tuo esempio) non è stato aggiornato. Anche se il debugger fosse in grado di sapere quando un attributo è stato modificato aggiornandolo ogni volta (e tutte le "registrazioni") sarebbe troppo costoso.
Così il debugger controllerà l'attributo solo quando lo accede esplicitamente.
Chrome in questo caso farà anche solo una volta:
p = []; window.x = {x: p};
Object {x: Array[0]}
x: Array[0]
__proto__: Object
x.x.push(1);
1
x.x.push(2);
2
Klicking x
, aggiornamenti dell'array
p = []; window.x = {x: p};
Object {x: Array[2]}
x: Array[2]
0: 1
1: 2
length: 2
__proto__: Array[0]
__proto__: Object
aggiungendo un articolo più alla matrice e toggleing x
nuovo, la dimensione e le voci rimangono
x.x.push(3)
3
x: Array[2]
0: 1
1: 2
length: 2
__proto__: Array[0]
A mio parere non è necessario che il logger aggiorni il valore dell'oggetto poiché l'orologio variabile ha già questa funzione. Qui puoi sempre aggiornare il valore corrente di una variabile.
Questo funziona in Firebug e Chrome. Ecco un esempio per Chrome:
fonte
2014-07-06 10:54:07
La mia ipotesi migliore è che inizialmente abbia 0 elementi, ma poi l'oggetto viene aggiornato, quindi mostra la nuova versione al momento dell'espansione. – Scimonster
L'ho provato prima e quando lo faccio: console.log (JSON.stringify()); poi ci sono anche tutti i post. Ma quando provo ad accedervi non è in grado di trovare alcun post. –
Sì, la console lo fa. Come detto, deve essere stato zero al momento della stampa, ma probabilmente ripassa i dati. Lo stesso accade per un oggetto che viene stampato e poi usato e svuotato. La console mostrerà che ha ciò che hai usato, ma se estendi l'oggetto può essere vuoto. – GillesC