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: 1-js/02-first-steps/05-types/article.md
+5-3Lines changed: 5 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -46,13 +46,15 @@ n = 12.345;
46
46
alert( "not a number" / 2 ); // NaN، چنین تقسیمی اشتباه است
47
47
```
48
48
49
-
هر عملی بر روی `NaN`نتیجه`NaN`خواهد داشت:
49
+
`NaN` دشوار است. هر عمل ریاضیاتی روی `NaN`مقدار`NaN`را برمیگرداند:
50
50
51
51
```js run
52
-
alert( "not a number" / 2 + 5 ); // NaN
52
+
alert( NaN + 1 ); // NaN
53
+
alert( 3 * NaN ); // NaN
54
+
alert( "not a number" / 2 - 1 ); // NaN
53
55
```
54
56
55
-
در نتیجه اگر `NaN` در عملیات ریاضیاتیای وجود داشته باشد، بر روی تمام معادله تاثیر میگذارد (نتیجه معادله برابر `NaN` خواهد بود).
57
+
در نتیجه اگر جایی در عبارت ریاضیاتی `NaN`وجود داشته باشد، بر روی تمام معادله تاثیر میگذارد (فقط یک استثنا برای آن وجود دارد:`NaN ** 0` برابر با `1` است).
56
58
57
59
```smart header="عملیات ریاضیاتی امن هستند"
58
60
عملیات ریاضی در جاوااسکریپت امن است. ما هر نوع عملی میتوانیم انجام دهیم مانند تقسیم بر صفر، رفتار کردن با رشتههای غیر عددی همانند اعداد و غیره.
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/12-nullish-coalescing-operator/article.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -106,7 +106,7 @@ alert(height ?? 100); // 0
106
106
107
107
## اولویت
108
108
109
-
اولویت عملگر `??`تقریبا برابر با عملگر `||` است، اما کمتر. اولویت آن در [جدول MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table) برابر با `5` است، در حالی که اولویت `||` برابر با `6` است.
109
+
اولویت عملگر `??` برابر با عملگر `||` است. اولویت آنها در [جدول MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table) برابر با `4` است.
110
110
111
111
این یعنی که درست مانند `||`، عملگر nullish coalescing `??` قبل از `=` و `?` ارزیابی میشود، اما بعد از بیشتر عملیاتها مانند `+`، `-` ارزیابی میشود.
ولی در بسیاری از موارد عملی، ما ترجیح میدهیم به جای خطا، `undefined` را دریافت کنیم (به معنای "بدون خیابان").
27
27
28
-
...و مثالی دیگر، در توسعه وب، ما میتوانیم یک شیء که با یک المان در صفحه مطابقت دارد را با استفاده از یک متد خاص، مانند `document.querySelector('.elem')` بگیریم و این متد هنگامی که چنین المانی وجود نداشته باشد `null` را برمیگرداند:
28
+
...و مثالی دیگر. در توسعه وب، ما میتوانیم یک شیء که با یک المان در صفحه مطابقت دارد را با استفاده از یک متد خاص، مانند `document.querySelector('.elem')` بگیریم و این متد هنگامی که چنین المانی وجود نداشته باشد `null` را برمیگرداند:
29
29
30
30
```js run
31
31
// document.querySelector('.elem') خواهد شد اگر المنت وجود نداشته باشد null برابر با
Copy file name to clipboardExpand all lines: 1-js/05-data-types/10-destructuring-assignment/article.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,7 +5,7 @@
5
5
- شیءها به ما این امکان را میدهند تا چیزی بسازیم که المانهای داده را به واسطه کلید ذخیره کند.
6
6
- آرایهها به ما امکان جمعآوری المانهای داده را در لیستی مرتب میدهند.
7
7
8
-
اگرچه، زمانی که ما آنها را به تابع میدهیم، ممکن است که نیازی به کل یک شیء/آرایه نباشد. ممکن است تنها قطعههای تکی نیاز باشد.
8
+
اگرچه، زمانی که ما آنها را به تابع میدهیم، ممکن است که نیازی به کل یک شیء/آرایه نباشد. شاید تنها قطعههای تکی نیاز باشد.
9
9
10
10
*مقداردهیِ تجزیهکنندهی ساختار (Destructuring assignment)* یک سینتکس خاص است که به ما امکان میدهد تا آرایهها یا شیءها را درون چند متغیر «پخش کنیم» چون بعضی اوقات این موضوع کار را راحتتر میکند.
3.`3.js` را بارگذاری میکنیم سپس اگر خطایی نداشت -- کار دیگری انجام میدهیم`(*)`
197
+
1.`1.js`را بارگذاری میکنیم سپس اگر خطایی نداشت
198
+
2.`2.js`را بارگذاری میکنیم سپس اگر خطایی نداشت
199
+
3.`3.js` را بارگذاری میکنیم سپس اگر خطایی نداشت -- کار دیگری انجام میدهیم`(*)`
199
200
200
-
هرچقدر فراخوانی های ما تودرتو باشند کدهای مارا عمیقتر و غیرقابل فهم و مدیریت میکنند مخصوصا اگر به جای ... ها کدهای واقعی داشته باشیم که خود شامل حلقه ها و شرط ها و هر جمله دیگری هستند.
201
+
هرچقدر فراخوانیها بیشتر تودرتو میشوند، کدها عمیقتر و برای مدیریت دشوارتر میشوند مخصوصا اگر به جای `...`کدهای واقعی داشته باشیم که خود ممکن است شامل حلقهها و شرطها و هر چیز دیگری باشند.
201
202
202
203
که معمولا به آن "جهنم فراخوانی" (callback-hell / pyramid of doom) میگویند.
203
204
@@ -260,9 +261,9 @@ function step3(error, script) {
260
261
}
261
262
}
262
263
```
263
-
همینجوری که مشاهده میکنید نتیجه تغییری نکرد ولی از تودرتو بودن فراخوانی ها با تعریف کردن توابع به صورت جداگانه برای هر مرحله از تودرتو بودن عمیق جلوگیری کردیم.
264
+
همانطور که مشاهده میکنید نتیجه تغییری نکرد ولی از تودرتو بودن فراخوانیها با تعریف کردن توابع به صورت جداگانه برای هر مرحله از تودرتو بودن عمیق جلوگیری کردیم.
264
265
265
-
این روش کار میکند ولی کدش تکه تکه و جدا از هم است که خواندن آن را سخت میکند. همانطور که احتمالا دیدید لازم است در حین خواندن از جایی به جای دیگر بپرید. این طور اصلا راحت نیست مخصوصا اگر به کد آشنا نباشید و ندانید باید برای ادامه کد کجا را بخوانید.
266
+
این روش کار میکند ولی کدش تکه تکه و جدا از هم است. خواندن آن دشوارتر است و احتمالا متوجه شدید که لازم است در حین خواندن از جایی به جای دیگر بپرید. اینگونه اصلا مناسب نیست مخصوصا اگر به کد آشنا نباشید و ندانید برای ادامه باید کجای کد را بخوانید.
266
267
267
268
همچنین توابعِ `step*` فقط یکبار استفاده میشوند و فقط برای جلوگیری از بوجود امدن جهنم فراخوانی و تودرتویی بیش از حد تعریف شده اند که باعث بی نظمی زیادی در کد میشوند.
Copy file name to clipboardExpand all lines: 1-js/11-async/03-promise-chaining/article.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -120,7 +120,7 @@ new Promise(function(resolve, reject) {
120
120
});
121
121
```
122
122
123
-
Here the first `.then` shows `1` and returns `new Promise(…)` in the line `(*)`. After one second it resolves, and the result (the argument of `resolve`, here it's `result * 2`) is passed on to handler of the second `.then`. That handler is in the line `(**)`, it shows `2` and does the same thing.
123
+
Here the first `.then` shows `1` and returns `new Promise(…)` in the line `(*)`. After one second it resolves, and the result (the argument of `resolve`, here it's `result * 2`) is passed on to the handler of the second `.then`. That handler is in the line `(**)`, it shows `2` and does the same thing.
124
124
125
125
So the output is the same as in the previous example: 1 -> 2 -> 4, but now with 1 second delay between `alert` calls.
0 commit comments