ok
This commit is contained in:
parent
9064e35f3f
commit
4c531b5ae7
371 changed files with 338 additions and 316 deletions
|
@ -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.
|
||||
|
|
@ -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?
|
Loading…
Add table
Add a link
Reference in a new issue