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
# Array.prototype.concat() - nu afectează array-ul
1
+
# `Array.prototype.concat()` - nu afectează array-ul
2
2
3
-
Realizează o „copie simplă” (shallow copy) formată din elementele array-ului asupra căruia se invocă metoda și elementele care se doresc a fi adăugate.
3
+
Realizează o „copie simplă” (*shallow copy*) formată din elementele array-ului asupra căruia se invocă metoda și elementele care se doresc a fi adăugate.
Ceea ce trebuie remarcat este faptul că operațiunea concat realizează o „desfacere” a unui array și alipirea valorilor sale, dacă acesta este poziționat primul. Un array poziționat dincolo de prima valoare, va fi introdus ca array și nu ca valorile sale.
15
+
Ceea ce trebuie remarcat este faptul că operațiunea concat realizează o „desfacere” a unui array și alipirea valorilor sale, dacă acesta este poziționat primul. Un array poziționat dincolo de prima valoare, va fi introdus ca array și valorile sale în mod direct.
16
16
17
17
Elementele array-urilor originale sunt copiate în noul array format respectându-se următoarele reguli:
18
18
- în cazul obiectelor sunt copiate referințe către acestea, nu obiectele în sine. Dacă un obiect referențiat este modificat, se va reflecta în array-ul original și cel nou format.
19
-
- în cazul șirurilor și numerelor, acestea vor fi copiate în noul array. Modificarea valorilor din array-urile originale nu se vor răsfrânge în cel nou constituit.
19
+
- în cazul *șirurilor de caractere* și a *numerelor*, acestea vor fi copiate în noul array. Modificarea valorilor din array-urile originale nu se vor răsfrânge în cel nou constituit.
20
+
21
+
La un array se pot adăuga elemente în mod direct folosindu-se `concat` prin pasarea unui al doilea argument.
22
+
23
+
```javascript
24
+
var arr = [1, 2, 3];
25
+
arr.concat("ceva");
26
+
console.log(arr);
27
+
// [ 1, 2, 3, "ceva" ]
28
+
```
20
29
21
30

22
31
23
-
Se poate chiar construi o funcție concat folosind slice, dar care să facă concat pe argumentele pasate.
32
+
Se poate chiar construi o funcție `concat` folosind `slice`, dar care să facă concat pe argumentele pasate.
Copy file name to clipboardExpand all lines: obiecte/obiecte-interne-standard/RegExp/RegExp.md
+11-11Lines changed: 11 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -125,7 +125,7 @@ Să spunem că un fragment de text începe cu un caracter ales de tine sau un ș
125
125
Fără acest fanion, va fi returnată doar prima potrivire care se face.
126
126
Folosind fanionul, se va face potrivire pe tot ce seamănă cu secvența șablonul.
127
127
128
-
### Proprietăți ale obiectului `RegExp`
128
+
### Proprietăți ale obiectului prototip a lui `RegExp`
129
129
130
130
Aceste proprietăți sunt foarte utile atunci când dorești să afli starea în care se află obiectul regex la un anumit moment dat.
131
131
@@ -263,7 +263,7 @@ console.dir(cautare);
263
263
264
264
Fără niciun fanion specificat, se va face regărirea primului caracter din set, când acesta este întâlnit în șir. Căutarea se va opri aici. Folosirea fanionului `g`, va avea ca efect căutarea în întreg șirul după fiecare caracter din setul specificat.
265
265
266
-
Regex-ul permite folosirea unui caracter special, linia, care va specifica limitele setului. Un bun exemplu este căutarea prin întreg setul de caractere de la a la z: `[a-z]` sau majusculele `[A-Z]` ori cifrele `[0-9]`. Caracterul liniuță spune Regex-ului să constituie un ***set***. O mică precizare pentru a elimina confuziile: pentru a face potrivire după însăși caracterul `-`, trebuie precedate de backslash. Atenție, potrivirea se va face după un singur caracter din acel set, nu după toate sau mai simplu, este răspunsul la întrebarea: caracterul la care mă uit se regăsește în acest set?
266
+
Regex-ul permite folosirea unui caracter special, linia, care va specifica limitele setului. Un bun exemplu este căutarea prin întreg setul de caractere de la a la z: `[a-z]` sau majusculele `[A-Z]` ori cifrele `[0-9]`. Caracterul liniuță spune RegExp-ului să constituie un ***set***. O mică precizare pentru a elimina confuziile: pentru a face potrivire după însăși caracterul `-`, trebuie precedate de backslash. Atenție, potrivirea se va face după un singur caracter din acel set, nu după toate sau mai simplu, este răspunsul la întrebarea: caracterul la care mă uit se regăsește în acest set?
Acest lucru se petrece pentru că punctul consideră prima croșetă care în gândirea noastră ar trebui să închidă parcurgerea șirului drept un caracter oarecare și va vontinua cu toate celelalte până când va ajunge la poziția de după ultimul caracter. Abia atunci motorul RegExp va privi ultimul caracter și-l va compara cu cel din regex pentru a vedea dacă este ce caută pentru a satisface șablonul. Dacă mai sunt alte caractere diferite de `>`, pur și simplu se va întoarce înapoi pe cărare și la primul caracter `>` va returna ca potrivire. Operațiunea de a merge înapoi pe șir pentru a satisface căutarea se numește `backtracking` (back înseamnă „înapoi” și tracking „a urma”). După ce a făcut backtracking, va returna „nerăbdător” ceea ce a găsit.
357
357
358
-
Cum transformi comportamentul expansiv (greedy) într-unul autosuficient? Adaugi imediat după plus cuantificatorul `?`
358
+
Cum transformi comportamentul expansiv (**greedy**) într-unul autosuficient? Adaugi imediat după plus cuantificatorul `?`
359
359
360
360
```javascript
361
361
var sir ='<p>Un <cite>citat.</cite></p>';
@@ -374,7 +374,7 @@ var cautare = sir.match(/pământ?/gi);
374
374
console.dir(cautare); // apare de 2 ori
375
375
```
376
376
377
-
De fapt, nu e chiar atât de inteligent regex-ul, ci doar spune că acea combinație de caractere trebuie să apară în șir cuantificându-se de câte ori apare indiferent ce precede sau cu ce continuă.
377
+
De fapt, nu e chiar atât de inteligent RegExp-ul, ci doar spune că acea combinație de caractere trebuie să apară în șir numărându-se de câte ori apare indiferent ce precede sau cu ce continuă.
378
378
379
379
Un strop de inteligență ar fi să introduci alternative într-un grup, care, la rândul său să existe sau nu.
Ceea ce se mai observă este că metacaracterul `?` este unul care implică comportamentul expansiv (greedy). De ce? Pentru că spune motorului că musai trebuie să potrivească șablonul ca mai apoi să se dea bătut dacă acesta are corespondent în string. Pentru a face șablonul autosuficient (lazzy), ar trebui să mai pui un metacaracter `?` după primul.
397
+
Ceea ce se mai observă este că metacaracterul `?` este unul care implică comportamentul expansiv (**greedy**). De ce? Pentru că spune motorului că musai trebuie să potrivească șablonul ca mai apoi să se dea bătut dacă acesta are corespondent în string. Pentru a face șablonul autosuficient (**lazzy**), ar trebui să mai pui un metacaracter `?` după primul.
398
398
399
399
Cuantificatorul `*` este combinația celor dinainte. Este și el un cuantificator expansiv încercând să consume întreaga resursă de șir.
400
400
@@ -608,7 +608,7 @@ obi;
608
608
609
609
Acesta este un caz foarte simplu în care dacă avem elemente de același fel acestea se vor suprascrie în obiect.
610
610
611
-
### Backreferencing
611
+
### Backreferencing - căutare înapoi cu un pas
612
612
613
613
Gruparea activează un mecanism de memorizare care ține minte șirul de caractere pentru secvența șablonului dintre parantezele rotunde. Mecanismul de memorizare poate fi anulat la nevoie. Nu uita faptul că memorizarea (***backreference***) taxează ca și resurse. Dacă nu ai nevoie de ea, anuleaz-o. De exemplu, în `bună(stare)?`, fragmentul memorizat, la momentul extragerii din șir va fi `stare`. Pentru a renunța la memorizare pui imediat după deschiderea parantezei rotunde a grupului sintaxa specială semnul întrebării și două puncte: `?:`. Astfel, șablonul va deveni `bună(?:stare)?`. Sintaxa `?:` spune motorului să nu folosească capturarea, memorizarea.
## Lookahead pozitiv și negativ - căutarea cu anticipare
648
648
649
649
Am menționat deja că un șablon `a(?=b)` indică motorului RegExp faptul că trebuie să avanseze pe șir pentru a satisface potrivirea lui a urmat imediat de `b` așa cum avem acum.
650
650
@@ -669,7 +669,7 @@ console.log(sir.match(sir));
669
669
670
670
Șabloanele regex fac casă bună cu anumite metodele ale obiectului intern String.
671
671
672
-
### Căutarea cu `search`
672
+
### Căutarea folosind metoda `search(șablon)`
673
673
674
674
Metoda specializată acceptă drept argument un șablon regex pentru a face căutări.
675
675
@@ -680,7 +680,7 @@ ceva.search(/orice/); // 14
680
680
681
681
Este returnat indexul la care apare pentru prima dată combinația specificată de șablon. De ce nu a luat în considerare și primul cuvânt? Pentru că litera o este o majusculă care are nevoie de alt șablon. Prima secvență care se potrivește perfect este la indexul 4 al șirului.
682
682
683
-
### Căutare cu `match`
683
+
### Căutarea folosind metoda `match(șablon)`
684
684
685
685
Rezultatul unei căutări pe șir cu metoda `match` a obiectului intern `String`.
686
686
@@ -693,9 +693,9 @@ console.dir(potriviri);
693
693
Rezultatul este un array, care are valoarea 14 pentru `index` și la `input` întreg șirul.
694
694
Dacă este activat fanionul `g`, regăsirea se va face pe tot șirul în toate combinațiile posibile și se va completa array-ul cu toate aceste variante.
695
695
696
-
### Înlocuiri simple de șiruri -`replace`
696
+
### Înlocuirea unui șir folosind metoda`replace(șablon, înlocuitor)`
697
697
698
-
Adeseori regex-urile sunt cuplate cu metoda replace a obiectului intern `String`.
698
+
Adeseori regex-urile sunt cuplate cu metoda `replace` a obiectului intern `String`.
Copy file name to clipboardExpand all lines: obiecte/obiecte-interne-standard/String/prototype-string-methods/String.prototype.concat.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,7 +7,7 @@ var nucleu = "Salutare, ";
7
7
console.log(nucleu.concat('prietene,', ' ce mai faci?')); // Salutare, prietene, ce mai faci?
8
8
```
9
9
10
-
Același efect poate fi obținut cu următoarea secvență de cod, care de această dată construiește o funcție concat și care operează asupra array-like-ului `arguments`:
10
+
Același efect poate fi obținut cu următoarea secvență de cod, care de această dată construiește o funcție `concat` și care operează asupra array-like-ului `arguments`:
console.log(sirNou); // ceva text pentru a fi unit
18
18
```
19
19
20
-
Folosirea `rest parameters`, adică o sintaxă ce permite extragerea unui Array din argumentele pasate unei funcții. Această sintaxă constă din adăugarea unui nume de parametru prefixat de trei puncte de suspensie. Această sintaxă generează un Array adevărat, nu un array-like așa cum este `arguments`.
20
+
Folosirea `rest parameters`, adică o sintaxă ce permite extragerea unui Array din argumentele pasate unei funcții. Această sintaxă constă din adăugarea unui nume de parametru prefixat de trei puncte de suspensie. Această sintaxă generează un array adevărat, nu un *array-like* așa cum este `arguments`.
Copy file name to clipboardExpand all lines: obiecte/obiecte-interne-standard/Symbol/Symbol.md
+35-5Lines changed: 35 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -159,14 +159,44 @@ Prin ce se disting *simbolurile binecunoscute* de celelalte? Prin faptul că sun
159
159
160
160
Acesta este cazul operatorului `instanceof` prin care putem afla dacă un anumit obiect este o instanță a celui pentru care se face investigația.
161
161
162
+
```javascript
163
+
var obi = {x:true};
164
+
obi instanceofObject; // true
165
+
// echivalent cu
166
+
Object[Symbol.hasInstance](obi);
167
+
```
168
+
169
+
Concluzia este că operatorul `instanceof` începând cu ECMAScript 6 a devenit o prescurtare către metoda `hasInstance` a lui `Symbol`. În acest caz, toate funcțiile în JavaScript vor avea o metodă `Symbol.hasInstance` prin care se poate testa dacă un obiecte este sau nu o instanță a acesteia. Această metodă este chiar în obiectul prototip al lui `Function` (`Function.prototype`), ceea ce face ca toate funcțiile să o moștenească. Proprietatea `Symbol.hasInstance` este non-writable, nonconfigurable și nonenumerable pentru a se asigura faptul că nu va fi suprascrisă dintr-o eroare. Totuși, fii foarte atent că prin utilizarea metodei `Object.defineProperty()`, poți modifica fără probleme `Symbol.hasInstance`.
170
+
162
171
### `Symbol.isConcatSpreadable`
163
172
164
-
Aceasta este o valoare boolean. Ceea ce indică ea este dacă un obiect poate fi transformat într-un array ce conține proprietățile sale atunci când se invocă `concat` pe un array existent. Adu-ți aminte că un array este la rândul său un obiect, de fapt. Acest simbol dă girul că obiectul poate fi tratat ca un array căruia urmează să i se adauge noi elemente.
173
+
Aceasta este o valoare boolean. Ceea ce indică ea este dacă un obiect poate fi transformat într-un array ce conține proprietățile sale atunci când se invocă `concat` pe un array existent. Adu-ți aminte că un array este la rândul său un obiect, de fapt. Acest simbol dă girul că obiectul poate fi tratat ca un array căruia urmează să se adauge ca elemente noi la un array pe care se face `concat`-ul.
174
+
175
+
```javascript
176
+
var obiSimulandUnArray = {
177
+
0:"unu",
178
+
1:"doi",
179
+
length:2,
180
+
[Symbol.isConcatSpreadable]:true
181
+
};
182
+
// obiSimulandUnArray are acum comportament de array
183
+
var numaram = ["zero"].concat(obiSimulandUnArray);
184
+
console.log(numaram); // [ "zero", "unu", "doi" ]
185
+
```
165
186
166
187
### `Symbol.iterator`
167
188
168
189
Acest simbol este mijlocul prin care se aplează iteratorul pentru un anumit obiect. Este binecunoscută apelarea iteratorului atunci când se folosește `for...of`.
169
190
191
+
### Expunerea metodelor prin care se realizează interacțiuni cu textul
192
+
193
+
Există patru metode a constructorului `Symbol`, care permit o posibilă interacțiune și mai intimă cu modul în care sunt exploatate textele folosind regex-urile. Pentru a înțelege ce oferă metodele lui Symbol, să trecem în revistă metodele utilizate de obiectul intern `RegExp`.
194
+
195
+
-`match(șablonRegExp)` prin care se verifică dacă un șir de caractere este identic cu cel menționat prin șablonul regex-ului.
196
+
-`replace(șablonRegExp, șirDeÎnlocuire)` prin care se caută un fragment identic cu cel menționat de regex, iar atunci când este găsit, se face înlocuirea sa cu șirul de caractere introdus ca al doilea argument.
197
+
-`search(șablonRegExp)` localizează un fragment menționat prin șablonul regex-ului în interiorul unui text.
198
+
-`split(șablonRegExp)` „sparge” un șir de caractere într-un array pe baza potrivirii după un șablon menționat prin regex.
199
+
170
200
### `Symbol.match`
171
201
172
202
Este simbolul care pune în funcțiune algoritmii responsabili cu realizarea unei căutări într-un șir de caractere după un șablon. Este apelabil prin invocarea metodei `match()` pusă la dispoziție de obiectul intern RegExp.
@@ -179,14 +209,14 @@ Este simbolul care pune în funcțiune algoritmii responsabili cu realizarea une
179
209
180
210
Este mecanismul declanțat la căutarea într-un șir după un șablon atunci când este apelată metoda `search()` a lui RegExp.
181
211
182
-
### `Symbol.species`
183
-
184
-
Este o valoare implicată în crearea de obiecte derivate.
185
-
186
212
### `Symbol.split`
187
213
188
214
Este algoritmul care se pune în mișcare la apelarea metodei `split()` pe care obiectul intern String o pune la dispoziție.
189
215
216
+
### `Symbol.species`
217
+
218
+
Este o valoare implicată în crearea de obiecte derivate.
219
+
190
220
### `Symbol.toPrimitive`
191
221
192
222
Un simbol utilizat pentru a converti un obiect la o primitivă. Standardul îl menționează, dar încă nu există aplicații practice.
Copy file name to clipboardExpand all lines: operatori/operatori-de-relatie.md
+4-3Lines changed: 4 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -25,10 +25,10 @@ var obi = {a: 1, b: 2};
25
25
26
26
## Operatorul `instanceof`
27
27
28
-
Acest operator testează dacă în lanțul prototipal al unui obiect se află proprietatea `prototype` a unui constructor.
28
+
Acest operator testează dacă în lanțul prototipal al unui obiect se află proprietatea `prototype` a unui constructor. Începând cu ECMAScript 6, operatorul `instanceof` este o prescurtare care apelează metoda `hasInstance` a constructorului `Symbol`. Toate funcțiile au o metodă `Symbol.hasInstance` cu ajutorul căreia se poate verifica dacă un anume obiect este sau nu o instanță a acelei funcții.
29
29
30
30
```javascript
31
-
functionEX(){};
31
+
functionEX () {};
32
32
var obiX =newEX();
33
33
34
34
Object.getPrototypeOf(obiX); // prototype este Object
@@ -50,8 +50,9 @@ Dacă este nevoie poți seta proprietatea `prototype` la un obiect diferit de ce
50
50
EX.prototype= {};
51
51
```
52
52
53
-
Nu uita că portotipul unui obiect se mai poate seta și cu `Object.setPrototypeOf(obiectul)`.
53
+
Adu-ți mereu aminte că prototipul unui obiect se mai poate seta și cu `Object.setPrototypeOf(obiectul)`.
54
54
55
55
## Mantre
56
56
57
57
- Un obiect literal are prototype `undefined`. Cu toate acestea la interogare cu instanceof trimite la Object.
58
+
-`instanceof` este o prescurtare care apelează metoda `hasInstance` a constructorului `Symbol`.
0 commit comments