Can I add a string property?
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:
There may be two kinds of result:
- An error.
Why? Let’s replay what’s happening at line
- When a property of
stris accessed, a “wrapper object” is created.
- The operation with the property is carried out on it. So, the object gets the
- 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.