Skip to content

Commit 6d89162

Browse files
minor update
1 parent ff42fcc commit 6d89162

File tree

1 file changed

+1
-34
lines changed

1 file changed

+1
-34
lines changed

1-js/04-object-basics/01-object/article.md

Lines changed: 1 addition & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ Accesul la proprietățile formate din mai multe cuvinte nu se poate face cu pun
100100
// aceasta va genera o erroare de sintaxă
101101
user.likes birds = true
102102
```
103+
103104
Javascript nu înțelege asta. El crede că ne adresăm la `user.likes` și apoi ne răspunde cu syntax error când vede în mod neașteptat `birds`.
104105

105106
Punctul necesită ca cheia să fie un identifier valid de variabilă. În mod implicit: nu conține spații, nu începe cu numere și nu include caractere speciale (`$` și `_` sunt permise).
@@ -204,40 +205,6 @@ Parantezele pătrate sunt mult mai puternice decât notația cu punct. Ele permi
204205

205206
Deci, de cele mai multe ori, când numele proprietăților sunt cunoscute și simple se folosește punctul, iar daca avem nevoie de ceva mai complex, trecem la parantezele pătrate.
206207

207-
````smart header="Cuvintele rezervate sunt permise ca nume de proprietăți"
208-
O variabilă nu poate avea un nume identic cu unul dintre cuvintele rezervate limbajului precum "for", "let", "return" etc.
209-
210-
În schimb, pentru o proprietate a unui obiect nu există o astfel de restricție. Orice nume este bun:
211-
212-
```js run
213-
let obj = {
214-
for: 1,
215-
let: 2,
216-
return: 3
217-
};
218-
219-
alert( obj.for + obj.let + obj.return ); // 6
220-
```
221-
222-
Practic, orice nume este permis, însă există unul special: `"__proto__"` care primește un tratament preferențial din motive istorice. De exemplu, nu îl putem seta la o valoare non-obiect:
223-
224-
```js run
225-
let obj = {};
226-
obj.__proto__ = 5;
227-
alert(obj.__proto__); // [object Object], nu a funcționat cum ne-am așteptat
228-
```
229-
230-
După cum vedem din cod, atribuirea către o primitivă `5` este ignorată.
231-
232-
Acest lucru poate deveni o sursă de bug-uri și chiar vulnerabilități dacă intenționăm să stocăm perechi cheie-valoare arbitrare într-un obiect și să permitem unui vizitator să specifice cheile.
233-
234-
În acest caz vizitatorul poate alege `__proto__` ca și cheie, iar logica de atribuire va fi stricată (după cum se arată mai sus).
235-
236-
Există o modalitate, pe care o vom acoperi mai târziu, de a face obiectele să trateze `__proto__` ca pe o proprietate obișnuită, dar mai întâi trebuie să știm mai multe despre obiecte.
237-
238-
Există, de asemenea, o altă structură de date [Map](info:map-set), pe care o vom învăța în capitolul <info:map-set>, care acceptă chei arbitrare.
239-
````
240-
241208
## Prescurtare (shorthand) pentru valoarea proprietății
242209

243210
În cod real folosim des variabile existente ca valori pentru numele proprietăților.

0 commit comments

Comments
 (0)