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: ro-RO/README.ro.md
+346Lines changed: 346 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -1549,4 +1549,350 @@ Cu toate acestea, nu returnăm o valoare. Atunci când nu returnăm o valoare di
1549
1549
</p>
1550
1550
</details>
1551
1551
1552
+
---
1553
+
1554
+
###### 51. Care este rezultatul?
1555
+
1556
+
```javascript
1557
+
functiongetInfo(member, year) {
1558
+
member.name='Lydia';
1559
+
year ='1998';
1560
+
}
1561
+
1562
+
constperson= { name:'Sarah' };
1563
+
constbirthYear='1997';
1564
+
1565
+
getInfo(person, birthYear);
1566
+
1567
+
console.log(person, birthYear);
1568
+
```
1569
+
1570
+
- A: `{ name: "Lydia" }, "1997"`
1571
+
- B: `{ name: "Sarah" }, "1998"`
1572
+
- C: `{ name: "Lydia" }, "1998"`
1573
+
- D: `{ name: "Sarah" }, "1997"`
1574
+
1575
+
<details><summary><b>Răspuns</b></summary>
1576
+
<p>
1577
+
1578
+
#### Răspuns: A
1579
+
1580
+
Argumentele sunt transmise prin _valoare_, cu excepția cazului în care valoarea lor este un obiect, caz în care sunt transmise prin _referință_. `birthYear` este transmis prin valoare, deoarece este un șir de caractere (string), nu un obiect. Atunci când transmitem argumente prin valoare, se creează o _copie_ a acelei valori (consultați întrebarea 46).
1581
+
1582
+
Variabila `birthYear` are o referință la valoarea `"1997"`. Argumentul `year` are, de asemenea, o referință la valoarea `"1997"`, dar nu este aceeași valoare la care se referă `birthYear`. Atunci când actualizăm valoarea lui `year` prin setarea lui `year` egal cu `"1998"`, actualizăm doar valoarea lui `year`. `birthYear` rămâne în continuare egal cu `"1997"`.
1583
+
1584
+
Valoarea lui `person` este un obiect. Argumentul `member` are o referință (copiată) către _același_ obiect. Atunci când modificăm o proprietate a obiectului la care se referă `member` valoarea lui `person` va fi de asemenea modificată, deoarece ambele au o referință la același obiect. Proprietatea `name` a lui `person` este acum egală cu valoarea `"Lydia"`.
1585
+
1586
+
</p>
1587
+
</details>
1588
+
1589
+
---
1590
+
1591
+
###### 52. Care este rezultatul?
1592
+
1593
+
```javascript
1594
+
functiongreeting() {
1595
+
throw'Hello world!';
1596
+
}
1597
+
1598
+
functionsayHi() {
1599
+
try {
1600
+
constdata=greeting();
1601
+
console.log('It worked!', data);
1602
+
} catch (e) {
1603
+
console.log('Oh no an error:', e);
1604
+
}
1605
+
}
1606
+
1607
+
sayHi();
1608
+
```
1609
+
1610
+
- A: `It worked! Hello world!`
1611
+
- B: `Oh no an error: undefined`
1612
+
- C: `SyntaxError: can only throw Error objects`
1613
+
- D: `Oh no an error: Hello world!`
1614
+
1615
+
<details><summary><b>Răspuns</b></summary>
1616
+
<p>
1617
+
1618
+
#### Răspuns: D
1619
+
1620
+
Cu instrucțiunea `throw` putem crea erori personalizate. Cu această instrucțiune, puteți arunca excepții. O excepție poate fi un <b>șir de caractere</b>, un <b>număr</b>, un <b>boolean</b> sau un <b>obiect</b>. În acest caz, excepția noastră este șirul `'Hello world!'`.
1621
+
1622
+
Cu instrucțiunea `catch` putem specifica ce să facem dacă o excepție este aruncată în blocul `try`. O excepție este aruncată: șirul `'Hello world!'`. `e` este acum egal cu acel șir, pe care îl înregistrăm. Acest lucru duce la rezultatul `'Oh an error: Hello world!'`.
1623
+
1624
+
</p>
1625
+
</details>
1626
+
1627
+
---
1628
+
1629
+
###### 53. Care este rezultatul?
1630
+
1631
+
```javascript
1632
+
functionCar() {
1633
+
this.make='Lamborghini';
1634
+
return { make:'Maserati' };
1635
+
}
1636
+
1637
+
constmyCar=newCar();
1638
+
console.log(myCar.make);
1639
+
```
1640
+
1641
+
- A: `"Lamborghini"`
1642
+
- B: `"Maserati"`
1643
+
- C: `ReferenceError`
1644
+
- D: `TypeError`
1645
+
1646
+
<details><summary><b>Răspuns</b></summary>
1647
+
<p>
1648
+
1649
+
#### Răspuns: B
1650
+
1651
+
Atunci când o funcție constructor este apelată cu cuvântul cheie `new`, aceasta creează un obiect și stabilește cuvântul cheie `this` să se refere la acel obiect. În mod implicit, dacă funcția constructor nu returnează explicit nimic, va returna obiectul creat recent.
1652
+
1653
+
În acest caz, funcția constructor `Car` returnează în mod explicit un obiect nou cu proprietatea `make` setată la `"Maserati"`, ceea ce suprascrie comportamentul implicit. Prin urmare, atunci când este apelat `new Car()` obiectul _returnat_ este atribuit lui `myCar`, ceea ce duce la rezultatul `"Maserati"` atunci când se accesează `myCar.make`.
1654
+
1655
+
</p>
1656
+
</details>
1657
+
1658
+
---
1659
+
1660
+
###### 54. Care este rezultatul?
1661
+
1662
+
```javascript
1663
+
(() => {
1664
+
let x = (y =10);
1665
+
})();
1666
+
1667
+
console.log(typeof x);
1668
+
console.log(typeof y);
1669
+
```
1670
+
1671
+
- A: `"undefined", "number"`
1672
+
- B: `"number", "number"`
1673
+
- C: `"object", "number"`
1674
+
- D: `"number", "undefined"`
1675
+
1676
+
<details><summary><b>Răspuns</b></summary>
1677
+
<p>
1678
+
1679
+
#### Răspuns: A
1680
+
1681
+
`let x = (y = 10);` este de fapt o prescurtare pentru
1682
+
1683
+
```javascript
1684
+
y =10;
1685
+
let x = y;
1686
+
```
1687
+
1688
+
Când setăm `y` egal cu `10`, adăugăm de fapt o proprietate `y` la obiectul global (`window` într-un browser, `global` în Node). Într-un browser, `window.y` este acum egal cu `10`.
1689
+
1690
+
Apoi, declarăm o variabilă `x` cu valoarea `y`, care este `10`. Variabilele declarate cu cuvântul cheie `let` au domeniu de bloc _block scoped_, ele sunt definite doar în blocul în care sunt declarate; în cazul de față, în funcția expresie invocată imediat (IIFE). Atunci când folosim operatorul `typeof` operandul `x` nu este definit: încercăm să accesăm `x` în afara blocului în care este declarat. Acest lucru înseamnă că `x` nu este definit. Valorile care nu au primit o valoare sau nu au fost declarate sunt de tip `"undefined"`. `console.log(typeof x)` returnează `"undefined"`.
1691
+
1692
+
Cu toate acestea, am creat o variabilă globală `y` atunci când am setat `y` egal cu `10`. Această valoare este accesibilă oriunde în codul nostru. `y` este definită și deține o valoare de tip `"number"`. `console.log(typeof y)` returnează `"number"`.
1693
+
1694
+
</p>
1695
+
</details>
1696
+
1697
+
---
1698
+
1699
+
###### 55. Care este rezultatul?
1700
+
1701
+
```javascript
1702
+
classDog {
1703
+
constructor(name) {
1704
+
this.name= name;
1705
+
}
1706
+
}
1707
+
1708
+
Dog.prototype.bark=function() {
1709
+
console.log(`Woof I am ${this.name}`);
1710
+
};
1711
+
1712
+
constpet=newDog('Mara');
1713
+
1714
+
pet.bark();
1715
+
1716
+
deleteDog.prototype.bark;
1717
+
1718
+
pet.bark();
1719
+
```
1720
+
1721
+
- A: `"Woof I am Mara"`, `TypeError`
1722
+
- B: `"Woof I am Mara"`, `"Woof I am Mara"`
1723
+
- C: `"Woof I am Mara"`, `undefined`
1724
+
- D: `TypeError`, `TypeError`
1725
+
1726
+
<details><summary><b>Răspuns</b></summary>
1727
+
<p>
1728
+
1729
+
#### Răspuns: A
1730
+
1731
+
Putem șterge proprietăți din obiecte folosind cuvântul cheie `delete` inclusiv de pe prototip. Prin ștergerea unei proprietăți de pe prototip, aceasta nu mai este disponibilă în lanțul prototipului. În acest caz, funcția `bark` nu mai este disponibilă pe prototip după `delete Dog.prototype.bark`, dar încercăm totuși să o accesăm.
1732
+
1733
+
Când încercăm să apelăm ceva care nu este o funcție, este aruncată o excepție `TypeError`. În acest caz, se generează eroarea `TypeError: pet.bark is not a function`, deoarece `pet.bark` este `undefined`.
1734
+
1735
+
</p>
1736
+
</details>
1737
+
1738
+
---
1739
+
1740
+
###### 56. Care este rezultatul?
1741
+
1742
+
```javascript
1743
+
constset=newSet([1, 1, 2, 3, 4]);
1744
+
1745
+
console.log(set);
1746
+
```
1747
+
1748
+
- A: `[1, 1, 2, 3, 4]`
1749
+
- B: `[1, 2, 3, 4]`
1750
+
- C: `{1, 1, 2, 3, 4}`
1751
+
- D: `{1, 2, 3, 4}`
1752
+
1753
+
<details><summary><b>Răspuns</b></summary>
1754
+
<p>
1755
+
1756
+
#### Răspuns: D
1757
+
1758
+
Obiectul `Set` este o colecție de valori unice: o valoare poate apărea doar o singură dată într-un set.
1759
+
1760
+
m transmis iterable-ul `[1, 1, 2, 3, 4]` cu o valoare duplicată `1`. Deoarece nu putem avea două valori identice într-un set, una dintre ele este eliminată. Acest lucru duce la rezultatul `{1, 2, 3, 4}`.
1761
+
1762
+
</p>
1763
+
</details>
1764
+
1765
+
---
1766
+
1767
+
###### 57. Care este rezultatul?
1768
+
1769
+
```javascript
1770
+
// counter.js
1771
+
let counter =10;
1772
+
exportdefaultcounter;
1773
+
```
1774
+
1775
+
```javascript
1776
+
// index.js
1777
+
importmyCounterfrom'./counter';
1778
+
1779
+
myCounter +=1;
1780
+
1781
+
console.log(myCounter);
1782
+
```
1783
+
1784
+
- A: `10`
1785
+
- B: `11`
1786
+
- C: `Error`
1787
+
- D: `NaN`
1788
+
1789
+
<details><summary><b>Răspuns</b></summary>
1790
+
<p>
1791
+
1792
+
#### Răspuns: C
1793
+
1794
+
Un modul importat este _doar pentru citire_: nu puteți modifica modulul importat. Doar modulul care le exportă poate schimba valorile acestora.
1795
+
1796
+
Când încercăm să incrementăm valoarea lui `myCounter`, apare o eroare: `myCounter` este doar pentru citire și nu poate fi modificat.
1797
+
1798
+
</p>
1799
+
</details>
1800
+
1801
+
---
1802
+
1803
+
###### 58. Care este rezultatul?
1804
+
1805
+
```javascript
1806
+
constname='Lydia';
1807
+
age =21;
1808
+
1809
+
console.log(delete name);
1810
+
console.log(delete age);
1811
+
```
1812
+
1813
+
- A: `false`, `true`
1814
+
- B: `"Lydia"`, `21`
1815
+
- C: `true`, `true`
1816
+
- D: `undefined`, `undefined`
1817
+
1818
+
<details><summary><b>Răspuns</b></summary>
1819
+
<p>
1820
+
1821
+
#### Răspuns: A
1822
+
1823
+
Operatorul `delete` returnează o valoare booleană: `true` în cazul ștergerii reușite, în caz contrar va returna `false`. Cu toate acestea, variabilele declarate cu cuvintele cheie `var`, `const` sau `let` nu pot fi șterse folosind operatorul `delete`.
1824
+
1825
+
Variabila `name` a fost declarată cu cuvântul cheie `const` așa că ștergerea sa nu reușește: se returnează `false`. Atunci când setăm `age` egal cu `21`, de fapt am adăugat o proprietate numită `age` la obiectul global. În acest fel, puteți șterge cu succes proprietăți din obiecte, inclusiv din obiectul global, așa că `delete age` returnează `true`.
1826
+
1827
+
</p>
1828
+
</details>
1829
+
1830
+
---
1831
+
1832
+
###### 59. Care este rezultatul?
1833
+
1834
+
```javascript
1835
+
constnumbers= [1, 2, 3, 4, 5];
1836
+
const [y] = numbers;
1837
+
1838
+
console.log(y);
1839
+
```
1840
+
1841
+
- A: `[[1, 2, 3, 4, 5]]`
1842
+
- B: `[1, 2, 3, 4, 5]`
1843
+
- C: `1`
1844
+
- D: `[1]`
1845
+
1846
+
<details><summary><b>Răspuns</b></summary>
1847
+
<p>
1848
+
1849
+
#### Răspuns: C
1850
+
1851
+
Putem dezasambla (unpack) valori din array-uri sau proprietăți din obiecte prin destructurare. De exemplu:
Acest lucru înseamnă că valoarea lui `y` este egală cu prima valoare din array, care este numărul `1`. Când înregistrăm în consolă `y`, se returnează `1`.
Este posibil să combinăm obiecte folosind operatorul de răspândire`...`. Acesta vă permite să creați copii ale perechilor cheie/valoare dintr-un obiect și să le adăugați la alt obiect. În acest caz, creăm copii ale obiectului `user` și le adăugăm la obiectul `admin`. Obiectul `admin` conține acum perechile cheie/valoare copiate, ceea ce duce la rezultatul `{ admin: true, name: "Lydia", age: 21 }`.
0 commit comments