Back to the lesson

Can I add a string property?

importance: 5

Consider the following code:

let str = "Hello";

str.test = 5;

alert(str.test);

How do you think, will it work? What will be shown?

Try running it:

let str = "Hello";

str.test = 5; // (*)

alert(str.test);

There may be two kinds of result:

  1. undefined
  2. An error.

Why? Let’s replay what’s happening at line (*):

  1. When a property of str is accessed, a “wrapper object” is created.
  2. The operation with the property is carried out on it. So, the object gets the test property.
  3. The operation finishes and the “wrapper object” disappears.

So, on the last line, str has no trace of the property. A new wrapper object for every object operation on a string.

Some browsers though may decide to further limit the programmer and disallow to assign properties to primitives at all. That’s why in practice we can also see errors at line (*). It’s a little bit farther from the specification though.

This example clearly shows that primitives are not objects.

They just can not store data.

All property/method operations are performed with the help of temporary objects.