This commit is contained in:
Ilya Kantor 2016-07-31 00:28:27 +03:00
parent 9064e35f3f
commit 4c531b5ae7
371 changed files with 338 additions and 316 deletions

View file

@ -0,0 +1,31 @@
Try running it:
```js run
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.

View file

@ -0,0 +1,18 @@
importance: 5
---
# Can I add a string property?
Consider the following code:
```js
let str = "Hello";
str.test = 5;
alert(str.test);
```
How do you think, will it work? What will be shown?