You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/04-object-basics/01-object/article.md
+1-34Lines changed: 1 addition & 34 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -100,6 +100,7 @@ Accesul la proprietățile formate din mai multe cuvinte nu se poate face cu pun
100
100
// aceasta va genera o erroare de sintaxă
101
101
user.likes birds =true
102
102
```
103
+
103
104
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`.
104
105
105
106
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
204
205
205
206
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.
206
207
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
-
241
208
## Prescurtare (shorthand) pentru valoarea proprietății
242
209
243
210
În cod real folosim des variabile existente ca valori pentru numele proprietăților.
0 commit comments