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
+290Lines changed: 290 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1259,4 +1259,294 @@ Atunci, `[1, 2, 0, 1]` este `acc` și `[2, 3]` este `cur`. Le concatenăm și ob
1259
1259
</p>
1260
1260
</details>
1261
1261
1262
+
---
1263
+
1264
+
###### 41. Care este rezultatul?
1265
+
1266
+
```javascript
1267
+
!!null;
1268
+
!!'';
1269
+
!!1;
1270
+
```
1271
+
1272
+
- A: `false``true``false`
1273
+
- B: `false``false``true`
1274
+
- C: `false``true``true`
1275
+
- D: `true``true``false`
1276
+
1277
+
<details><summary><b>Răspuns</b></summary>
1278
+
<p>
1279
+
1280
+
#### Răspuns: B
1281
+
1282
+
`null` este falsy. `!null` returnează `true`. `!true` returnează `false`.
1283
+
1284
+
`""` este falsy. `!""` returnează `true`. `!true` returnează `false`.
1285
+
1286
+
`1` este truthy. `!1` returnează `false`. `!false` returnează `true`.
1287
+
1288
+
</p>
1289
+
</details>
1290
+
1291
+
---
1292
+
1293
+
###### 42. Ce returnează metoda `setInterval` în browser?
1294
+
1295
+
```javascript
1296
+
setInterval(() =>console.log('Hi'), 1000);
1297
+
```
1298
+
1299
+
- A: un id unic
1300
+
- B: cantitatea de milisecunde specificată
1301
+
- C: funcția furnizată
1302
+
- D: `undefined`
1303
+
1304
+
<details><summary><b>Răspuns</b></summary>
1305
+
<p>
1306
+
1307
+
#### Răspuns: A
1308
+
1309
+
Aceasta returnează un identificator unic. Acest id poate fi utilizat pentru a opri intervalul respectiv cu ajutorul funcției `clearInterval()`.
1310
+
1311
+
</p>
1312
+
</details>
1313
+
1314
+
---
1315
+
1316
+
###### 43. Ce returnează acest lucru?
1317
+
1318
+
```javascript
1319
+
[...'Lydia'];
1320
+
```
1321
+
1322
+
- A: `["L", "y", "d", "i", "a"]`
1323
+
- B: `["Lydia"]`
1324
+
- C: `[[], "Lydia"]`
1325
+
- D: `[["L", "y", "d", "i", "a"]]`
1326
+
1327
+
<details><summary><b>Răspuns</b></summary>
1328
+
<p>
1329
+
1330
+
#### Răspuns: A
1331
+
1332
+
Un șir de caractere este un obiect iterabil. Operatorul de răspândire (spread operator) mapează fiecare caracter dintr-un obiect iterabil la un element separat.
1333
+
1334
+
</p>
1335
+
</details>
1336
+
1337
+
---
1338
+
1339
+
###### 44. Care este rezultatul?
1340
+
1341
+
```javascript
1342
+
function*generator(i) {
1343
+
yield i;
1344
+
yield i *2;
1345
+
}
1346
+
1347
+
constgen=generator(10);
1348
+
1349
+
console.log(gen.next().value);
1350
+
console.log(gen.next().value);
1351
+
```
1352
+
1353
+
- A: `[0, 10], [10, 20]`
1354
+
- B: `20, 20`
1355
+
- C: `10, 20`
1356
+
- D: `0, 10 and 10, 20`
1357
+
1358
+
<details><summary><b>Răspuns</b></summary>
1359
+
<p>
1360
+
1361
+
#### Răspuns: C
1362
+
1363
+
Funcțiile regulate nu pot fi oprite în mijlocul execuției după invocare. Cu toate acestea, o funcție generator poate fi "oprită" în mijloc și ulterior poate continua de la locul unde s-a oprit. De fiecare dată când o funcție generator întâlnește un cuvânt cheie `yield`, funcția furnizează valoarea specificată după el. Notați că funcția generator în acest caz nu _returnează_ the valoarea, ci _furnizează_ valoarea.
1364
+
1365
+
Mai întâi, inițializăm funcția generator cu `i` egal cu `10`. Invocăm funcția generator folosind metoda `next()`. Prima dată când invocăm funcția generator, `i` este egal cu `10`. Aceasta întâlnește primul cuvânt cheie `yield`: furnizează valoarea lui `i`. Generatorul este acum "pauzat", și se înregistrează valoarea `10`.
1366
+
1367
+
Apoi, invocăm din nou funcția cu metoda `next()`. Ea începe să continue de unde s-a oprit anterior, încă cu `i` egal cu `10`. Acum, întâlnește următorul cuvânt cheie `yield`, și furnizează `i * 2`. `i` este egal cu `10`, așa că returnează `10 * 2`, adică `20`. Acest lucru duce la rezultatul `10, 20`.
Atunci când transmitem mai multe promisiuni metodei `Promise.race`, ea rezolvă/rejectează _prima_ promisiune care se rezolvă/rejectează. Pentru metoda `setTimeout`, transmitem un cronometru: 500ms pentru prima promisiune (`firstPromise`), și 100ms pentru a doua promisiune (`secondPromise`). Acest lucru înseamnă că `secondPromise` se rezolvă primul cu valoarea `'two'`. `res` conține acum valoarea `'two'`, care se înregistrează în consolă.
1399
+
1400
+
</p>
1401
+
</details>
1402
+
1403
+
---
1404
+
1405
+
###### 46. Care este resultatul?
1406
+
1407
+
```javascript
1408
+
let person = { name:'Lydia' };
1409
+
constmembers= [person];
1410
+
person =null;
1411
+
1412
+
console.log(members);
1413
+
```
1414
+
1415
+
- A: `null`
1416
+
- B: `[null]`
1417
+
- C: `[{}]`
1418
+
- D: `[{ name: "Lydia" }]`
1419
+
1420
+
<details><summary><b>Răspuns</b></summary>
1421
+
<p>
1422
+
1423
+
#### Răspuns: D
1424
+
1425
+
În primul rând, declarăm o variabilă `person` cu valoarea unui obiect care are o proprietate `name`.
Apoi, declarăm o variabilă numită `members`. Setăm primul element al acestui array egal cu valoarea variabilei `person`. Obiectele interacționează prin _referință_ atunci când le setăm egale între ele. Atunci când atribuiți o referință de la o variabilă la alta, faceți o _copie_ a acelei referințe. (notați că acestea nu au _aceași_ referință!)
Noi modificăm doar valoarea variabilei `person` nu și primul element din array, deoarece acel element are o referință diferită (copiată) la obiect. Primul element din `members` încă păstrează referința sa la obiectul original. Când înregistrăm în consolă array-ul `members` primul element păstrează valoarea obiectului, care este afișată în consolă.
1438
+
1439
+
</p>
1440
+
</details>
1441
+
1442
+
---
1443
+
1444
+
###### 47. Care este rezultatul?
1445
+
1446
+
```javascript
1447
+
constperson= {
1448
+
name:'Lydia',
1449
+
age:21,
1450
+
};
1451
+
1452
+
for (constitemin person) {
1453
+
console.log(item);
1454
+
}
1455
+
```
1456
+
1457
+
- A: `{ name: "Lydia" }, { age: 21 }`
1458
+
- B: `"name", "age"`
1459
+
- C: `"Lydia", 21`
1460
+
- D: `["name", "Lydia"], ["age", 21]`
1461
+
1462
+
<details><summary><b>Răspuns</b></summary>
1463
+
<p>
1464
+
1465
+
#### Răspuns: B
1466
+
1467
+
Cu un ciclu `for-in` putem itera prin cheile obiectului, în acest caz `name` și `age`. În interior, cheile obiectului sunt șiruri de caractere (dacă nu sunt de tip Symbol). În fiecare iterație, setăm valoarea lui `item` egală cu cheia curentă pe care o parcurge. Mai întâi, `item` este egal cu `name`, și este înregistrat în consolă. Apoi, `item` este egal cu `age`, care este, de asemenea, înregistrat în consolă.
1468
+
1469
+
</p>
1470
+
</details>
1471
+
1472
+
---
1473
+
1474
+
###### 48. Care este rezultatul?
1475
+
1476
+
```javascript
1477
+
console.log(3+4+'5');
1478
+
```
1479
+
1480
+
- A: `"345"`
1481
+
- B: `"75"`
1482
+
- C: `12`
1483
+
- D: `"12"`
1484
+
1485
+
<details><summary><b>Răspuns</b></summary>
1486
+
<p>
1487
+
1488
+
#### Răspuns: B
1489
+
1490
+
Asociativitatea operatorilor este ordinea în care compilatorul evaluează expresiile, fie de la stânga la dreapta, fie de la dreapta la stânga. Acest lucru se întâmplă doar dacă toți operatorii au aceeași precedență. În cazul nostru, avem doar un tip de operator: `+`. Pentru adunare, asociativitatea este de la stânga la dreapta.
1491
+
1492
+
`3 + 4` este evaluat mai întâi. Acest lucru duce la numărul `7`.
1493
+
1494
+
`7 + '5'` duce la rezultatul `"75"` datorită coerției. JavaScript convertește numărul `7` într-un șir de caractere, așa cum am discutat în întrebarea 15. Putem concatena două șiruri de caractere folosind operatorul `+`. `"7" + "5"` rezultă în `"75"`.
1495
+
1496
+
</p>
1497
+
</details>
1498
+
1499
+
---
1500
+
1501
+
###### 49. Care este valoarea lui`num`?
1502
+
1503
+
```javascript
1504
+
constnum=parseInt('7*6', 10);
1505
+
```
1506
+
1507
+
- A: `42`
1508
+
- B: `"42"`
1509
+
- C: `7`
1510
+
- D: `NaN`
1511
+
1512
+
<details><summary><b>Răspuns</b></summary>
1513
+
<p>
1514
+
1515
+
#### Răspuns: C
1516
+
1517
+
Este returnat doar primul număr din șir. Bazat pe _radix_ (al doilea argument pentru a specifica în ce tip de număr dorim să-l parsăm: bază 10, hexazecimal, octal, binar, etc.), `parseInt` verifică dacă caracterele din șir sunt valide. Odată ce întâlnește un caracter care nu este un număr valid în baza specificată, oprește parsarea și ignoră caracterele ulterioare.
1518
+
1519
+
`*` nu este un număr valid. Parsează doar `"7"` în numărul zecimal `7`. Acum, `num` conține valoarea `7`.
1520
+
1521
+
</p>
1522
+
</details>
1523
+
1524
+
---
1525
+
1526
+
###### 50. Care este rezultatul?
1527
+
1528
+
```javascript
1529
+
[1, 2, 3].map(num=> {
1530
+
if (typeof num ==='number') return;
1531
+
return num *2;
1532
+
});
1533
+
```
1534
+
1535
+
- A: `[]`
1536
+
- B: `[null, null, null]`
1537
+
- C: `[undefined, undefined, undefined]`
1538
+
- D: `[ 3 x empty ]`
1539
+
1540
+
<details><summary><b>Răspuns</b></summary>
1541
+
<p>
1542
+
1543
+
#### Răspuns: C
1544
+
1545
+
Când se parcurge array-ul, valoarea lui `num` este egală cu elementul prin care parcurge în acel moment. În acest caz, elementele sunt numere, astfel că condiția din instrucțiunea `typeof num === "number"` returnează `true`. Funcția map creează un nou array și introduce valorile returnate de funcție.
1546
+
1547
+
Cu toate acestea, nu returnăm o valoare. Atunci când nu returnăm o valoare din funcție, funcția returnează `undefined`. Pentru fiecare element din array, blocul funcției este apelat, deci pentru fiecare element returnăm `undefined`.
0 commit comments