Se ho un array di oggetti, e ciclo attraverso di loro l'assegnazione di un attributo a ciascuno, WebStorm mi avverte:Valore assegnato al primitivo verrà perso
valori assegnati ai primitivo andranno persi
Tuttavia, durante il test nella console, non "perdere" alcun valore.
Ciò accade solo quando il ciclo si trova all'interno di una funzione.
Un esempio di questo errore di seguito:
let people = [
{
name: 'Foo',
age: 21,
surname: 'FooBar'
},
{
name: 'Bar',
age: 51,
surname: 'FooBar'
}
];
senza funzione avvolgitore:
people.forEach(function (person) {
person.surname = 'Baz'; // No error. Works in console.
});
Con funzione avvolgitore:
function changeSurname(people) {
people.forEach(function (person) {
person.surname = 'Baz'; // Error warning me that value assigned to primitive will be lost.
});
}
changeSurname(people);
Entrambi producono lo stesso output nella console (il cognome è cambiato in "baz").
Presumo che questo abbia qualcosa a che fare con il riferimento all'oggetto e quali siano i punti person
, ma non sono sicuro di cosa.
Perché vedo questo errore?
Quale potenziale errore sta cercando WebStorm di salvarmi da?
let rende la variabile una costante rendendo i tipi primitivi dell'oggetto interno. se hai bisogno di cambiare i valori al suo interno, non renderlo costante usare 'var' per dichiarare la variabile –
@AkshayKhandelwal Non sono convinto che sia vero. Anche con 'var' ho ancora l'errore. 'const' rende le cose una costante.'let' scopa la variabile sull'ambito del blocco. –
@MattLishman, IDE sta solo avvisando che l'argomento passato è un riferimento a un oggetto e in 'forEach-loop', il valore verrà modificato/perso .. – Rayon