2016-05-19 18 views
3

Ich habe ein Problem mit JSON.parse() das ist, dass es immer ein 'nicht verfügbar' Ergebnis zurückgibt. Hier ist ein einfacher Testfall:Merkwürdiges Verhalten von JSON.parse() in Firefox

Dies produziert: lnkArr: <unavailable>. Es spielt keine Rolle, was ich parse, das Ergebnis ist das gleiche. Es gibt keine damit verbundenen Fehler und der gleiche Code funktioniert in Chrome einwandfrei. Gibt es etwas, dass ich hier falsch mache oder ist das ein Fehler? Wenn jemand mich auf Informationen darüber hinweisen kann, was "nicht verfügbar" bedeutet, würde ich das wirklich schätzen, weil alles, was ich darüber herausfinden kann, über den Umfang spricht und nichts sagt, dass Umfang sich so ändert.

aktualisieren

Ich bin mit Firefox Developer Edition 48.0a2 (2016.05.19). Die mit Martin verbundene Geige bringt die gleichen Ergebnisse.

+1

Meine beste Vermutung ist, dass der Garbage Collector ist als die Konsole schneller. Objekte zu protokollieren war schon immer schwierig, aber ich würde annehmen, dass das Protokoll die Sammlung verhindert. –

+1

Ich kann das nicht reproduzieren. Welche Firefox-Version verwendest du? Verwenden Sie die eingebaute Konsole oder Firebug? – JAAulde

+0

Was passiert hier in Ihrer Konsole: https://jsfiddle.net/tsym2euz/ Ich bin auf Firefox/osx und es scheint gut zu funktionieren –

Antwort

2

Answering aus den Kommentaren:

Dies ist ein Problem, wo die Konsole manchmal mit nicht im Einklang ist, was tatsächlich geschieht.

Chrome, insbesondere ist bekannt, dass die Konsole einen anderen Thread als der JavaScript-Code ausführen und somit Objekte ändern können - oder sogar Müll gesammelt werden zwischen dem Zeitpunkt console.log aufgerufen wird und wenn die Ergebnisse angezeigt werden.

JSON.stringify verwenden, können "kopieren" das Objekt, so dass es richtig log wird:

console.log('lnkArr: ', JSON.stringify(lnkArr)); 

Das heißt, in diesem Moment in der Zeit, lnkArr tatsächlich ein Objekt ist. Es wird als String in der Konsole angezeigt, weil wir danach gefragt haben - aber das dient nur zur Anzeige.

var str = '{"prop": true}'; 
 

 
var o = JSON.parse(str); 
 
console.log(JSON.stringify(o)); 
 
console.log('But `prop` is: ', o.prop);

Verwandte Themen