Wert zugewiesen primitive verloren

Wenn ich ein array von Objekten und eine Schleife Zuweisung eines Wertes an ein Attribut für jeden, WebStorm warnt mich:

Werte zugewiesen primitive verloren

Jedoch beim testen in der Konsole, die ich nicht "verlieren" keine Werte.

Dies geschieht nur, wenn die Schleife innerhalb einer Funktion.

Ein Beispiel für diesen Fehler unten:

let people = [
    {
        name: 'Foo',
        age: 21,
        surname: 'FooBar'
    },

    {
        name: 'Bar',
        age: 51,
        surname: 'FooBar'
    }
];

Ohne Funktion-wrapper:

people.forEach(function (person) {
    person.surname = 'Baz'; //No error. Works in console.
});

Mit der Funktion wrapper:

function changeSurname(people) {
    people.forEach(function (person) {
        person.surname = 'Baz'; //Error warning me that value assigned to primitive will be lost.
    });
}

changeSurname(people);

Beide erzeugen die gleiche Ausgabe in der Konsole (der Nachname wird geändert, um die 'baz').

Ich nehme an, dies hat etwas zu tun mit der Objekt-Referenz und was person Punkte, aber ich bin nicht sicher, was genau.

Warum sehe ich diese Fehler?

Welche möglichen Fehler ist WebStorm zu versuchen, zu retten mich aus?

  • lassen macht die variable zu einer Konstanten zu machen der internen Objekt-primitiven Typen. wenn Sie müssen, ändern Sie die Werte hinein, machen es nicht für die ständige Nutzung var um die variable zu deklarieren
  • Ich bin nicht davon überzeugt, dass wahr ist. Auch mit var ich bekomme immer noch den Fehler. const macht die Dinge eine Konstante. let Bereiche der Variablen in den block scope.
  • IDE ist einfach nur warnen Sie, dass die übergebene argument ist eine Referenz auf ein Objekt und in forEach-loop, wird der Wert geändert werden/verloren..
  • Aber das ist meine Verwirrung, der Wert ist nicht verloren geht, so weit ich erzählen kann. Wenn Sie den code zu kopieren (mit der Funktion wrapper), die Namen sind korrekt geändert. Bin ich Missverständnis, was ist verloren? Weil ich sehe keine Werte verloren gehen.
  • Früheren Wert von surname Objekt in der Hand hielt, verloren..IDE ist versucht zu sagen, dass, obwohl es ist ein argument für die Funktion, es als Verweis übergeben wird somit-Objekt aktualisiert wird!
  • Ah, ich sehe! Ich missverstanden, welcher Wert es sich bezog. Ganz eine lästige Fehlermeldung gegeben, dass die Aktualisierung der Objekt ist genau, was ich tun soll... gibt es etwas falsch mit dieser Art der Codierung dann? (das könnte ein anderer sein, SO Frage)
  • Entweder Weg, das beantwortet meine Frage, die ich glaube. Wenn Sie möchten, konvertieren Sie es in die Antwort kann ich upvote und zu akzeptieren.
  • es ist nur Dolmetscher/ - editor-Verwirrung und nicht alle code-Problem. Aber noch können Sie ersetzen .forEach mit der .map-Funktion, wenn Sie die Zuordnung aller Werte. Beide sind richtig, obwohl.

InformationsquelleAutor Matt Lishman | 2016-06-20
Schreibe einen Kommentar