Skip to content

Commit 34523eb

Browse files
committed
Added the questions from 51-60
1 parent 2b20d4a commit 34523eb

File tree

1 file changed

+346
-0
lines changed

1 file changed

+346
-0
lines changed

ro-RO/README.ro.md

Lines changed: 346 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1549,4 +1549,350 @@ Cu toate acestea, nu returnăm o valoare. Atunci când nu returnăm o valoare di
15491549
</p>
15501550
</details>
15511551

1552+
---
1553+
1554+
###### 51. Care este rezultatul?
1555+
1556+
```javascript
1557+
function getInfo(member, year) {
1558+
member.name = 'Lydia';
1559+
year = '1998';
1560+
}
1561+
1562+
const person = { name: 'Sarah' };
1563+
const birthYear = '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+
function greeting() {
1595+
throw 'Hello world!';
1596+
}
1597+
1598+
function sayHi() {
1599+
try {
1600+
const data = 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+
function Car() {
1633+
this.make = 'Lamborghini';
1634+
return { make: 'Maserati' };
1635+
}
1636+
1637+
const myCar = new Car();
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+
class Dog {
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+
const pet = new Dog('Mara');
1713+
1714+
pet.bark();
1715+
1716+
delete Dog.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+
const set = new Set([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+
export default counter;
1773+
```
1774+
1775+
```javascript
1776+
// index.js
1777+
import myCounter from './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+
const name = '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+
const numbers = [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:
1852+
1853+
```javascript
1854+
[a, b] = [1, 2];
1855+
```
1856+
1857+
<img src="https://i.imgur.com/ADFpVop.png" width="200">
1858+
1859+
Valoarea lui `a` este acum `1`, iar valoarea lui `b` este acum `2`. Ceea ce am făcut în întrebare este:
1860+
1861+
```javascript
1862+
[y] = [1, 2, 3, 4, 5];
1863+
```
1864+
1865+
<img src="https://i.imgur.com/NzGkMNk.png" width="200">
1866+
1867+
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`.
1868+
1869+
</p>
1870+
</details>
1871+
1872+
---
1873+
1874+
###### 60. Care este rezultatul?
1875+
1876+
```javascript
1877+
const user = { name: 'Lydia', age: 21 };
1878+
const admin = { admin: true, ...user };
1879+
1880+
console.log(admin);
1881+
```
1882+
1883+
- A: `{ admin: true, user: { name: "Lydia", age: 21 } }`
1884+
- B: `{ admin: true, name: "Lydia", age: 21 }`
1885+
- C: `{ admin: true, user: ["Lydia", 21] }`
1886+
- D: `{ admin: true }`
1887+
1888+
<details><summary><b>Răspuns</b></summary>
1889+
<p>
1890+
1891+
#### Răspuns: B
1892+
1893+
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 }`.
1894+
1895+
</p>
1896+
</details>
1897+
15521898
---

0 commit comments

Comments
 (0)