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
The nullish coalescing operator is written as two question marks`??`.
5
+
Nulinio susiliejimo operatorius užrašomas dviem klausiamaisiais ženklais`??`.
6
6
7
-
As it treats`null`and`undefined`similarly, we'll use a special term here, in this article. We'll say that an expression is "defined" when it's neither `null` nor`undefined`.
7
+
Kadangi jis apdoroja`null`ir`undefined`vienodai, šiame straipsnyje įvesime specialų terminą. Trumpai sakysime, kad vertė yra “apibrėžta”, jei ji nėra lygi nei `null`, nei`undefined`.
8
8
9
-
The result of `a ?? b`is:
10
-
-if`a`is defined, then`a`,
11
-
-if`a`isn't defined, then`b`.
9
+
Rezultatas `a ?? b`yra:
10
+
-jei`a`yra apibrėžta, tada`a`,
11
+
-jei`a`yra neapibrėžta, tada`b`.
12
12
13
-
In other words, `??`returns the first argument if it's not `null/undefined`. Otherwise, the second one.
13
+
Kitaip tariant, `??`grąžina pirmąjį argumentą, jei jis nėra `null/undefined`. Priešingu atveju - antrąjį.
14
14
15
-
The nullish coalescing operator isn't anything completely new. It's just a nice syntax to get the first "defined" value of the two.
15
+
Nulinio susiliejimo operatorius nėra visiškai naujas. Tai tik graži sintaksė, leidžianti gauti pirmąją “apibrėžtą” vertę iš dviejų.
16
16
17
-
We can rewrite`result = a ?? b` using the operators that we already know, like this:
17
+
Mes galime perrašyti`result = a ?? b`, naudodami jau mums žinomus operatorius, pavyzdžiui, taip:
18
18
19
19
```js
20
20
result = (a !==null&& a !==undefined) ? a : b;
21
21
```
22
22
23
-
Now it should be absolutely clear what`??` does. Let's see where it helps.
23
+
Dabar turėtų būti visiškai aišku, ką daro`??`. Pažiūrėkime, kur jis padeda.
24
24
25
-
The common use case for `??`is to provide a default value for a potentially undefined variable.
25
+
Paprastai operatorius `??`reikalingas norint nustatyti numatytoją vertę potencialiai neapibrėžtam kintamajam.
26
26
27
-
For example, here we show`user` if defined, otherwise `Anonymous`:
27
+
Pavyzdžiui, čia mes atvaizduojame`user`, jei jo vertė nėra `null/undefined`, priešingu atveju - Anonimas:
28
28
29
29
```js run
30
30
let user;
31
31
32
-
alert(user ??"Anonymous"); //Anonymous (user not defined)
32
+
alert(user ??"Anonimas"); //Anonimas (user yra neapibrėžtas)
33
33
```
34
34
35
-
Here's the example with`user`assigned to a name:
35
+
O štai pavyzdys, kai`user`priskirta vertė:
36
36
37
37
```js run
38
-
let user ="John";
38
+
let user ="Jonas";
39
39
40
-
alert(user ??"Anonymous"); //John (user defined)
40
+
alert(user ??"Anonimas"); //Jonas (user yra apibrėžtas)
41
41
```
42
42
43
-
We can also use a sequence of `??`to select the first value from a list that isn't`null/undefined`.
43
+
Mes taip pat galime naudoti `??`seką, norėdami iš sąrašo išrinkti pirmąją vertę, kuri nėra`null/undefined`.
44
44
45
-
Let's say we have a user's data in variables `firstName`, `lastName`or`nickName`. All of them may be not defined, if the user decided not to enter a value.
45
+
Tarkime, kad turime naudotojo duomenis kintamuosiuose `firstName`, `lastName`arba`nickName`. Visi jie gali būti neapibrėžti, jei naudotojas nusprendė neįvesti vertės.
46
46
47
-
We'd like to display the user name using one of these variables, or show "Anonymous" if all of them aren't defined.
47
+
Mes norėtume, kad naudotojo vardas būtų atvaizduojamas naudojant vieną iš šių kintamųjų arba rodomas "Anonimas", jei visi jie neapibrėžti.
The OR`||`operator can be used in the same way as `??`, as it was described in the [previous chapter](info:logical-operators#or-finds-the-first-truthy-value).
64
+
Operatorius ARBA`||`gali būti naudojamas taip pat kaip ir `??`, kaip aprašyta [ankstesniame skyriuje](info:logical-operators#or-finds-the-first-truthy-value).
65
65
66
-
For example, in the code above we could replace `??`with`||`and still get the same result:
66
+
Pavyzdžiui, aukščiau pateiktame kode galėtume pakeisti `??`į`||`ir vis tiek gautume tą patį rezultatą:
Historically, the OR `||`operator was there first. It exists since the beginning of JavaScript, so developers were using it for such purposes for a long time.
79
+
Istoriškai ARBA `||`operatorius buvo pirmasis. Jis egzistuoja nuo pat JavaScript atsiradimo pradžios, todėl programišiai jau seniai jį naudojo tokiems tikslams.
80
80
81
-
On the other hand, the nullish coalescing operator `??`was added to JavaScript only recently, and the reason for that was that people weren't quite happy with`||`.
81
+
Kita vertus, nulinio susiliejimo operatorius `??`į JavaScript buvo pridėtas visai neseniai, o priežastis buvo ta, kad žmonės nebuvo patenkinti`||`.
82
82
83
-
The important difference between them is that:
84
-
- `||`returns the first *truthy* value.
85
-
- `??`returns the first *defined* value.
83
+
Svarbus skirtumas tarp jų yra tas, kad:
84
+
- `||`grąžina pirmąją *truthy* vertę.
85
+
- `??`grąžina pirmąją *apibrėžtą* vertę
86
86
87
-
In other words, `||`doesn't distinguish between `false`, `0`, an empty string `""`and`null/undefined`. They are all the same -- falsy values. If any of these is the first argument of `||`, then we'll get the second argument as the result.
87
+
Kitaip tariant, `||`neskiria `false`, `0`, tuščios eilutės `""`ir`null/undefined`. Jos visos yra vienodos -- falsy vertės. Jei bet kuri iš jų yra pirmasis `||` argumentas, kaip rezultatą gausime antrąjį argumentą.
88
88
89
-
In practice though, we may want to use default value only when the variable is `null/undefined`. That is, when the value is really unknown/not set.
89
+
Tačiau praktikoje numatytąją vertę galime norėti naudoti tik tada, kai kintamasis yra `null/undefined`. T. y. kai vertė iš tikrųjų nežinoma/nenustatyta.
90
90
91
-
For example, consider this:
91
+
Pavyzdžiui, panagrinėkite štai ką:
92
92
93
93
```js run
94
94
let height =0;
@@ -97,73 +97,73 @@ alert(height || 100); // 100
97
97
alert(height ??100); // 0
98
98
```
99
99
100
-
- The`height ||100`checks `height`for being a falsy value, and it's `0`, falsy indeed.
101
-
- so the result of `||`is the second argument, `100`.
102
-
- The`height ??100`checks `height`for being `null/undefined`, and it's not,
103
-
- so the result is `height` "as is", that is`0`.
100
+
- Naudojant`height ||100`patikrinama, ar `height`nėra falsy vertė, ir ji yra `0`, taigi tikrai falsy.
101
+
- taigi `||`rezultatas yra antrasis argumentas, `100`.
102
+
- Naudojant`height ??100`patikrinama, ar `height`nėra `null/undefined`, bet taip nėra,
103
+
- taigi rezultatas yra pats kintamasis `height`, t. y.`0`
104
104
105
-
In practice, the zero height is often a valid value, that shouldn't be replaced with the default. So`??`does just the right thing.
105
+
Praktikoje nulinis aukštis dažnai yra tinkama vertė, kurios nereikėtų keisti numatytąja. Taigi`??`daro teisingą dalyką.
106
106
107
-
## Precedence
107
+
## Pirmenybė
108
108
109
-
The precedence of the `??`operator is the same as `||`. They both equal `4` in the [MDN table](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table).
109
+
Operatoriaus `??`pirmenybė yra tokia pati kaip ir `||`. Abu jie [MDN lentelėje](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table) yra lygūs `4`.
110
110
111
-
That means that, just like`||`, the nullish coalescing operator `??`is evaluated before `=`and`?`, but after most other operations, such as`+`, `*`.
111
+
Tai reiškia, kad, kaip ir`||`, nulinio susiliejimo operatorius `??`vertinamas prieš `=`ir`?`, bet po daugumos kitų operacijų, tokių kaip`+`, `*`.
112
112
113
-
So if we'd like to choose a value with `??`in an expression with other operators, consider adding parentheses:
113
+
Taigi, jei norime pasirinkti vertę su `??`išraiškoje su kitais operatoriais, pridėkite skliaustelius:
114
114
115
115
```js run
116
116
let height =null;
117
117
let width =null;
118
118
119
-
//important: use parentheses
119
+
//svarbu: naudokite skliaustelius
120
120
let area = (height ??100) * (width ??50);
121
121
122
122
alert(area); // 5000
123
123
```
124
124
125
-
Otherwise, if we omit parentheses, then as `*`has the higher precedence than `??`, it would execute first, leading to incorrect results.
125
+
Priešingu atveju, jei praleisime skliaustelius, kadangi `*`turi didesnę pirmenybę nei `??`, jis bus vykdomas pirmas, todėl rezultatai bus neteisingi.
126
126
127
127
```js
128
-
//without parentheses
128
+
//be skliaustelių
129
129
let area = height ??100* width ??50;
130
130
131
-
// ...works the same as this (probably not what we want):
131
+
// ...veikia taip pat, kaip ir čia (tikriausiai ne tai, ko norime):
132
132
let area = height ?? (100* width) ??50;
133
133
```
134
134
135
-
### Using ?? with && or ||
135
+
### Naudojimas ?? kartu su && arba ||
136
136
137
-
Due to safety reasons, JavaScript forbids using`??`together with`&&`and`||`operators, unless the precedence is explicitly specified with parentheses.
137
+
Dėl saugumo priežasčių JavaScript draudžia naudoti`??`kartu su`&&`ir`||`operatoriais, nebent pirmenybė būtų aiškiai nurodyta skliaustuose.
138
138
139
-
The code below triggers a syntax error:
139
+
Toliau pateiktas kodas sukelia sintaksės klaidą:
140
140
141
141
```js run
142
-
let x =1&&2??3; //Syntax error
142
+
let x =1&&2??3; //Sintaksės klaida
143
143
```
144
144
145
-
The limitation is surely debatable, it was added to the language specification with the purpose to avoid programming mistakes, when people start to switch from `||`to`??`.
145
+
Šis apribojimas tikrai yra ginčytinas, jis buvo pridėtas į kalbos specifikaciją siekiant išvengti programavimo klaidų, kai žmonės pradeda pereiti nuo `||`prie`??`.
146
146
147
-
Use explicit parentheses to work around it:
147
+
Norėdami tai apeiti, naudokite aiškius skliaustelius:
148
148
149
149
```js run
150
150
*!*
151
-
let x = (1&&2) ??3; //Works
151
+
let x = (1&&2) ??3; //Veikia
152
152
*/!*
153
153
154
154
alert(x); // 2
155
155
```
156
156
157
-
## Summary
157
+
## Santrauka
158
158
159
-
- The nullish coalescing operator `??`provides a short way to choose the first "defined" value from a list.
159
+
- Nulinio susiliejimo operatorius `??`yra trumpas būdas pasirinkti pirmąją “apibrėžtą” vertę iš sąrašo.
160
160
161
-
It's used to assign default values to variables:
161
+
Jis naudojamas kintamiesiems priskirti numatytąsias vertes:
162
162
163
163
```js
164
-
//set height=100, if height is null or undefined
164
+
//nustatyti height=100, jei height lygus null arba undefined
165
165
height = height ??100;
166
166
```
167
167
168
-
- The operator `??`has a very low precedence, only a bit higher than`?`and`=`, so consider adding parentheses when using it in an expression.
169
-
- It's forbidden to use it with `||`or`&&`without explicit parentheses.
168
+
- Operatoriaus `??`pirmenybė yra labai maža, tik šiek tiek didesnė nei`?`ir`=`, todėl, naudodami jį išraiškoje, pridėkite skliaustelius.
169
+
- Draudžiama naudoti `??` su `||`arba`&&`be aiškių skliaustelių.
0 commit comments