Value assigned to primitive will be lost

If you will use square brackets the JetBrains editor(WebS/PhpS) will not show you any error.

person['surname'] = 'Baz';

I just had the same issue.

You can also ask WebStorm to disable inspection for the next line, but I decided to use a for of loop instead:

for (person of people) {
    person.surname = 'Baz';
}

It actually made my code more readable as a result so I was happy.


There's nothing improper in your code, WebStorm's type inference is getting a bit confused (this aspect of JavaScript is particularly confusing).

Its linter sees a string and assumes you will try something like this:

var primitive = "september";
primitive.vowels = 3;

primitive.vowels;
// => undefined

Which would lead to a 'lost' value.

The fact that it only catches this 'error' inside of a function seems like an outright bug that should be reported.

To further understand this weird part of JavaScript, I recommend Angus Croll's excellent in-depth article here.