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
+
Null֊ի միավորման օպերատորը գրվում է երկու հարցականի նշանի միջոցով՝ `??`։
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
+
Քանի որ այն վերաբերվում է `null`և`undefined`արժեքներին, մենք կօգտագործենք հատուկ տերմին այս հոդվածում։ Կասենք, որ արտահայտությունը "որոշված" է, եթե դրա արժեքը ո՛չ `null`է, ո՛չ `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
+
`a ?? b`արտահայտության արժեքը կլինի՝
10
+
-եթե`a`֊ն որոշված է, ապա`a`,
11
+
-եթե`a`֊ն որոշված չէ, ապա`b`։
12
12
13
-
In other words, `??`returns the first argument if it's not `null/undefined`. Otherwise, the second one.
13
+
Այլ կերպ ասած, `??`օպերատորը վերադարձնում է առաջին արգումենտը, եթե դրա արժեքը `null/undefined` չէ։ Հակառակ դեպքում՝ երկրորդը։
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
+
Null֊ի միավորման օպերատորը ամենևին նոր բան չէ, այն ուղղակի սիրուն գրելաձև է՝ երկու արժեքներից առաջին "որոշված" արժեքը ստանալու։
16
16
17
-
We can rewrite`result = a ?? b`using the operators that we already know, like this:
17
+
Կարող ենք գրել`result = a ?? b`արտահայտությունը օգտագործելով մեզ արդեն հայտնի օպերատորները․
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
+
Հիմա արդեն պետք է պարզ լինի, թե ինչ է անում `??`֊ը։ Տեսնենք, թե որտեղ կարող է այն օգտակար լինել։
24
24
25
-
The common use case for `??` is to provide a default value for a potentially undefined variable.
25
+
`??`֊ի հաճախ կիրառվում է պոտենցիալ չորոշված փոփոխականի փոխարեն լռելյայն (default) արժեք տալու համար:
26
26
27
-
For example, here we show`user` if defined, otherwise `Anonymous`:
27
+
Օրինակ, այստեղ ցուցադրում ենք`user`, եթե այն որոշված է, հակառակ դեպքում `Անանուն`․
28
28
29
29
```js run
30
30
let user;
31
31
32
-
alert(user ??"Anonymous"); //Anonymous (user not defined)
Here's the example with `user` assigned to a name:
35
+
Ահա օրինակ, երբ `user`֊ին վերագրված է անուն․
36
36
37
37
```js run
38
-
let user ="John";
38
+
let user ="Ջոն";
39
39
40
-
alert(user ??"Anonymous"); //John (user defined)
40
+
alert(user ??"Անանուն"); //Ջոն (user֊ը որոշված է)
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
+
Մենք կարող ենք նաև օգտագործել `??`֊ից կազմված շարան, առաջին ոչ `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
+
Ենթադրենք ունենք օգտատիրոջ տվյալները հետևյալ փոփոխականների մեջ՝ `firstName`, `lastName`, `nickName`։ Դրանք բոլորը կարող են որոշված չլինել, եթե օգտատերը որոշի չմուտքագրել արժեք։
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
+
Մենք ցանկանում ենք ցուցադրել օգտատիրոջ անունը, օգտագործելով տրված փոփոխականներից մեկը, կամ ցուցադրել "Անանուն", եթե դրանցից ոչ մեկ որոշված չէ։
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
+
ԿԱՄ `||`օպերատորը կարող է օգտագործվել նույն կերպ ինչ `??`, որը նկարագրված է [նախորդ հոդվածում](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
+
Օրինակ վերևի ծրագրում կարող ենք `??`֊ը փոխարինել`||`֊ով և ստանալ նույն արդյունքը․
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
+
ԿԱՄ `||`օպերատորը կար JavaScript֊ի ստեղծման պահից ի վեր, և ծրագրավորողները օգտագործում էին այն այսպիսի դեպքերի համար շատ երկար ժամանակ։
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
+
Իսկ null֊ի միավորման օպերատորը `??`ավելացվել է JavaScript֊ում վերջերս, և դրա պատճառը այն է, որ ծրագրավորողները այնքան էլ գոհ չէին `||`֊ից։
82
82
83
-
The important difference between them is that:
84
-
- `||` returns the first *truthy* value.
85
-
- `??` returns the first *defined* value.
83
+
Կարևոր տարբերությունը դրանց միջև․
84
+
- `||`֊ը վերադարձնում է առաջին *ճշմարիտ* արժեքը։
85
+
- `??`֊ը վերադարձնում է առաջին *որոշված* արժեքը։
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
+
Այլ կերպ ասած, `||`֊ը չի տարբերակում`false`, `0`, դատարկ տող `""`և`null/undefined` արժեքները։ Դրանք բոլորը նույնն են -- սխալական արժեքներ։ Եթե սրանցից ինչ֊որ մեկը լինի առաջին արգումենտ `||`֊ի համար, ապա մենք կստանանք երկրորդ արգումենտը արդյունքում։
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
+
Բայց պրակտիկայում լինում են դեպքեր երբ, մենք կարիք ենք ունենում օգտագործել լռելյայն արժեք միայն այն դեպքում, երբ փոփոխականը`null/undefined` է։ Դա այն դեպքն է, երբ արժեքը իրոք անհայտ է, կամ ոչ վերագրված։
90
90
91
-
For example, consider this:
91
+
Դիտարկենք հետևյալ օրինակը․
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
+
- `height ||100`արտահայտությունը ստուգում է, արդյոք `height`֊ը սխալական է, թե ոչ։ Այն `0` է, որն էլ սխալական է,
101
+
- այսպիսով `||`֊ի արդյունքը կլինի երկրորդ արգումենտը՝`100`։
102
+
- `height ??100`արտահայտությունը ստուգում է, արդյոք `height`֊ը `null/undefined` է, թե ոչ, որն էլ այդպիսին չէ,
103
+
- այսպիսով արդյունքը կլինի `height`, այսինքն `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
+
Պրակտիկայում զրոն վավեր (valid) արժեք է, որը չպետք է փոխարինվի լռելյայն արժեքով։ Այսինքն `??`֊ը անում է այն ինչ մեզ պետք է։
106
106
107
-
## Precedence
107
+
## Նախապատվություն
108
108
109
-
The precedence of the `??` operator is about the same as `||`, just a bit lower. It equals `5`in the [MDN table](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table), while`||` is `6`.
109
+
`??`֊ի նախապատվությունը գրեթե նույնն է ինչ `||`֊ինը։ Այն մի քիչ ցածր է՝ `5` [MDN աղյուսակում](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table), իսկ`||`֊ինը՝ `6`։
110
110
111
-
That means that, just like`||`, the nullish coalescing operator `??` is evaluated before `=`and`?`, but after most other operations, such as`+`, `*`.
111
+
Դա նշանակում է, որ ինչպես`||`֊ի դեպքում, null֊ի միավորման օպերատոր `??`֊ը կատարվում է `=`և`?` օպերատորներից առաջ, բայց շատ այլ օպերատորնեից հետո, ինչպիսիք են`+`, `*`։
112
112
113
-
So if we'd like to choose a value with `??` in an expression with other operators, consider adding parentheses:
113
+
Այսպիսով, եթե մենք օգտագործում ենք `??`֊ը այլ օպերատորների հետ միասին մեկ արտահայտությունում՝ արժեք ընտրելու համար, պետք է նաև ավելացնել փակագծեր․
114
114
115
115
```js run
116
116
let height =null;
117
117
let width =null;
118
118
119
-
//important: use parentheses
119
+
//կարևոր է օգտագործել փակագծեր
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
+
Հակառակ դեպքում, եթե չդնենք փակագծերը, ապա, քանի որ`*`֊ի նախապատվությունը ավելի բարձր է քան`??`֊ինը, այն կաշխատի առաջինը, որի արդյունքում էլ կստանանք սխալ պատասխան։
126
126
127
127
```js
128
-
//without parentheses
128
+
//առանց փակագծեր
129
129
let area = height ??100* width ??50;
130
130
131
-
// ...works the same as this (probably not what we want):
131
+
// ...աշխատում է ինչպես հետևյալը (որը այն չէ ինչ մենք ուզում ենք)․
132
132
let area = height ?? (100* width) ??50;
133
133
```
134
134
135
-
### Using ?? with && or ||
135
+
### ??֊ի օգտագործումը && և ||֊ի հետ
136
136
137
-
Due to safety reasons, JavaScript forbids using `??` together with `&&`and`||`operators, unless the precedence is explicitly specified with parentheses.
137
+
Անվտանգության նկատառումներից ելնելով JavaScript֊ը արգելում է օգտագործել `??`֊ը `&&`և`||`օպերատորների հետ, բացառությամբ այն դեպքերի, երբ հստակ փակագծերով նշված է հերթականությունը։
138
138
139
-
The code below triggers a syntax error:
139
+
Ներքևում գրված ծրագիրը կաշխատի սինտաքսի սխալով (syntax error)․
140
140
141
141
```js run
142
-
let x =1&&2??3; //Syntax error
142
+
let x =1&&2??3; //Սինտաքսի սխալ
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
+
Այս սահմանափակումը ախոս քննարկման ենթակա է, այն ավելացվել է լեզվում, որպեսզի խուսափվեն ծրագրային սխալները, երբ ծրագրավորողը սկսում է անցում կատարել`||`֊ից `??`֊ին։
146
146
147
-
Use explicit parentheses to work around it:
147
+
Օգտագործեք փակագծեր, որպեսզի այն աշխատի․
148
148
149
149
```js run
150
150
*!*
151
-
let x = (1&&2) ??3; //Works
151
+
let x = (1&&2) ??3; //Աշխատում է
152
152
*/!*
153
153
154
154
alert(x); // 2
155
155
```
156
156
157
-
## Summary
157
+
## Ամփոփում
158
158
159
-
- The nullish coalescing operator `??` provides a short way to choose the first "defined" value from a list.
159
+
- Null֊ի միավորման օպերատոր `??`֊ը տրամադրում է կարճ ձև ընտրելու առաջին "որոշված" արժեքը շարքից։
160
160
161
-
It's used to assign default values to variables:
161
+
Օգտագործվում է փոփոխականին լռելյայն արժեք վերագրելու համար․
162
162
163
163
```js
164
-
//set height=100, if height is null or undefined
164
+
//դնում ենք height֊ի արժեքը 100, եթե height֊ը null կամ 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
+
- `??`օպերատորը ունի շատ ցածր նախապատվության աստիճան, այն մի քիչ բարձր է, քան `?`և`=`֊ինը, այդ պատճառով կարևոր է հիշել ավելացնել փակագծեր, երբ այն օգտագործում ենք ինչ֊որ արտահայտության մեջ։
169
+
- Արգելված է օգտագործել այն `||`կամ`&&`օպերատորների հետ առանց փակագծերի։
0 commit comments