Was ist der effizienteste Weg, um ein JavaScript-Objekt zu klonen? Ich habe gesehen obj = eval(uneval(o));
verwendet werden, sondern das nicht dem Standard entspricht und nur von Firefox unterstützt wird .
Ich habe Dinge getan wie obj = JSON.parse(JSON.stringify(o));
stellen aber die Effizienz in Frage.
Ich habe auch rekursive Kopierfunktionen mit verschiedenen Fehlern gesehen.
Ich bin überrascht, dass es keine kanonische Lösung gibt.
566 Stimmen
Eval ist nicht böse. Schlechtes Benutzen von Eval schon. Wenn Sie Angst vor seinen Nebenwirkungen haben, verwenden Sie es falsch. Die Nebenwirkungen, die Sie fürchten, sind der Grund, warum Sie es verwenden. Hat eigentlich irgendjemand Ihre Frage beantwortet?
15 Stimmen
Das Klonen von Objekten ist eine knifflige Angelegenheit, insbesondere bei benutzerdefinierten Objekten beliebiger Sammlungen. Wahrscheinlich gibt es deshalb keine fertige Methode, dies zu tun.
12 Stimmen
eval()
ist im Allgemeinen eine schlechte Idee, weil viele Javascript-Engine-Optimierer abschalten müssen, wenn sie mit Variablen arbeiten, die übereval
. Nur miteval()
in Ihrem Code kann zu einer schlechteren Leistung führen.1 Stimmen
Hier ist ein Leistungsvergleich zwischen den gängigsten Arten von Klonobjekten: jsben.ch/#/t917Z
12 Stimmen
Beachten Sie, dass
JSON
Methode werden alle Javascript-Typen, die keine Entsprechung in JSON haben, verloren. Zum Beispiel:JSON.parse(JSON.stringify({a:null,b:NaN,c:Infinity,d:undefined,e:function(){},f:Number,g:false}))
erzeugt{a: null, b: null, c: null, g: false}
0 Stimmen
Die React-Gemeinschaft hat Folgendes eingeführt Unveränderlichkeits-Hilfsmittel