Skip to content

Commit 81f66f1

Browse files
authored
Merge pull request #192 from javascript-tutorial/sync-bae0ef44
Sync with upstream @ bae0ef4
2 parents 4309102 + 66d4ed1 commit 81f66f1

15 files changed

Lines changed: 54 additions & 21 deletions

File tree

1-js/02-first-steps/05-types/article.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,15 @@ n = 12.345;
4646
alert( "not a number" / 2 ); // NaN، چنین تقسیمی اشتباه است
4747
```
4848

49-
هر عملی بر روی `NaN` نتیجه `NaN` خواهد داشت:
49+
`NaN` دشوار است. هر عمل ریاضیاتی روی `NaN` مقدار `NaN` را برمی‌گرداند:
5050

5151
```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
5355
```
5456

55-
در نتیجه اگر `NaN` در عملیات ریاضیاتی‌ای وجود داشته باشد، بر روی تمام معادله تاثیر می‌گذارد (نتیجه معادله برابر `NaN` خواهد بود).
57+
در نتیجه اگر جایی در عبارت ریاضیاتی `NaN`وجود داشته باشد، بر روی تمام معادله تاثیر می‌گذارد (فقط یک استثنا برای آن وجود دارد: `NaN ** 0` برابر با `1` است).
5658

5759
```smart header="عملیات ریاضیاتی امن هستند"
5860
عملیات ریاضی در جاوااسکریپت امن است. ما هر نوع عملی می‌توانیم انجام دهیم مانند تقسیم بر صفر، رفتار کردن با رشته‌های غیر عددی همانند اعداد و غیره.

1-js/02-first-steps/12-nullish-coalescing-operator/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ alert(height ?? 100); // 0
106106
107107
## اولویت
108108
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` است.
110110
111111
این یعنی که درست مانند `||`، عملگر nullish coalescing `??` قبل از `=` و `?` ارزیابی می‌شود، اما بعد از بیشتر عملیات‌ها مانند `+`، `-` ارزیابی می‌شود.
112112

1-js/02-first-steps/17-arrow-functions-basics/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ welcome();
8484
let sum = (a, b) => { // کمانک یک تابع چندخظی را دربرمی‌گیرد
8585
let result = a + b;
8686
*!*
87-
return result; // اگر از کمانک استفاده کنیم باید از return استفاده کنیم
87+
return result; // استفاده کنیم "return" اگر از آکولاد استفاده کنیم، سپس باید صراحتا از
8888
*/!*
8989
};
9090

1-js/04-object-basics/04-object-methods/8-chain-calls/_js.view/solution.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@ let ladder = {
1111
},
1212
showStep: function() {
1313
alert(this.step);
14+
return this;
1415
}
1516
};

1-js/04-object-basics/04-object-methods/8-chain-calls/_js.view/test.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,14 @@ describe('Ladder', function() {
3232
it('down().up().up().up() ', function() {
3333
assert.equal(ladder.down().up().up().up().step, 2);
3434
});
35+
36+
it('showStep() should return this', function() {
37+
assert.equal(ladder.showStep(), ladder);
38+
});
39+
40+
it('up().up().down().showStep().down().showStep()', function () {
41+
assert.equal(ladder.up().up().down().showStep().down().showStep().step, 0)
42+
});
3543

3644
after(function() {
3745
ladder.step = 0;

1-js/04-object-basics/07-optional-chaining/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ alert(user.address.street); // !خطا
2525

2626
ولی در بسیاری از موارد عملی، ما ترجیح می‌دهیم به جای خطا، ‍`undefined` را دریافت کنیم (به معنای "بدون خیابان").
2727

28-
...و مثالی دیگر، در توسعه وب، ما می‌توانیم یک شیء که با یک المان در صفحه مطابقت دارد را با استفاده از یک متد خاص، مانند `document.querySelector('.elem')` بگیریم و این متد هنگامی که چنین المانی وجود نداشته باشد `null` را برمی‌گرداند:
28+
...و مثالی دیگر. در توسعه وب، ما می‌توانیم یک شیء که با یک المان در صفحه مطابقت دارد را با استفاده از یک متد خاص، مانند `document.querySelector('.elem')` بگیریم و این متد هنگامی که چنین المانی وجود نداشته باشد `null` را برمی‌گرداند:
2929

3030
```js run
3131
// document.querySelector('.elem') خواهد شد اگر المنت وجود نداشته باشد null برابر با

1-js/05-data-types/10-destructuring-assignment/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
- شیءها به ما این امکان را می‌دهند تا چیزی بسازیم که المان‌های داده را به واسطه کلید ذخیره کند.
66
- آرایه‌ها به ما امکان جمع‌آوری المان‌های داده را در لیستی مرتب می‌دهند.
77

8-
اگرچه، زمانی که ما آنها را به تابع می‌دهیم، ممکن است که نیازی به کل یک شیء/آرایه نباشد. ممکن است تنها قطعه‌های تکی نیاز باشد.
8+
اگرچه، زمانی که ما آن‌ها را به تابع می‌دهیم، ممکن است که نیازی به کل یک شیء/آرایه نباشد. شاید تنها قطعه‌های تکی نیاز باشد.
99

1010
*مقداردهیِ تجزیه‌کننده‌ی ساختار (Destructuring assignment)* یک سینتکس خاص است که به ما امکان می‌دهد تا آرایه‌ها یا شیءها را درون چند متغیر «پخش کنیم» چون بعضی اوقات این موضوع کار را راحت‌تر می‌کند.
1111

1-js/11-async/01-callbacks/article.md

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -164,8 +164,9 @@ loadScript("/my/script.js", function(error, script) {
164164

165165
## هرم عذاب
166166

167-
در نگاه اول این روش برای نوشتن کدهای ناهمگام پایدار بنظر میرسد. که واقعا هم این چنین است ولی برای نهایتا یک یا دو فراخوان تودرتو!!
168-
اما برای چندین عمل ناهمگام که یکی پس از دیگری اتفاق میفتد چیزی شبیه به این خواهیم داشت:
167+
در نگاه اول این روش برای نوشتن کدهای ناهمگام پایدار بنظر می‌رسد. که واقعا هم این چنین است. برای نهایتا یک یا دو فراخوانی تودرتو خوب بنظر می‌رسد.
168+
169+
اما برای چندین عمل ناهمگام که یکی پس از دیگری اتفاق می‌افتد کدی شبیه به این خواهیم داشت:
169170

170171
```js
171172
loadScript("1.js", function(error, script) {
@@ -193,11 +194,11 @@ loadScript("1.js", function(error, script) {
193194
});
194195
```
195196
در قطعه کد بالا داریم:
196-
1. `1.js`را بارگذاری میکنیم سپس اگر خطایی نداشت
197-
2. `2.js`را بارگذاری میکنیم سپس اگر خطایی نداشت
198-
3. `3.js` را بارگذاری میکنیم سپس اگر خطایی نداشت -- کار دیگری انجام میدهیم`(*)`
197+
1. `1.js`را بارگذاری می‌کنیم سپس اگر خطایی نداشت
198+
2. `2.js`را بارگذاری می‌کنیم سپس اگر خطایی نداشت
199+
3. `3.js` را بارگذاری می‌کنیم سپس اگر خطایی نداشت -- کار دیگری انجام می‌دهیم`(*)`
199200

200-
هرچقدر فراخوانی های ما تودرتو باشند کدهای مارا عمیقتر و غیرقابل فهم و مدیریت میکنند مخصوصا اگر به جای ... ها کدهای واقعی داشته باشیم که خود شامل حلقه ها و شرط ها و هر جمله دیگری هستند.
201+
هرچقدر فراخوانی‌ها بیشتر تودرتو می‌شوند، کدها عمیق‌تر و برای مدیریت دشوارتر می‌شوند مخصوصا اگر به جای `...` کدهای واقعی داشته باشیم که خود ممکن است شامل حلقه‌ها و شرط‌ها و هر چیز دیگری باشند.
201202

202203
که معمولا به آن "جهنم فراخوانی" (callback-hell / pyramid of doom) میگویند.
203204

@@ -260,9 +261,9 @@ function step3(error, script) {
260261
}
261262
}
262263
```
263-
همینجوری که مشاهده میکنید نتیجه تغییری نکرد ولی از تودرتو بودن فراخوانی ها با تعریف کردن توابع به صورت جداگانه برای هر مرحله از تودرتو بودن عمیق جلوگیری کردیم.
264+
همانطور که مشاهده می‌کنید نتیجه تغییری نکرد ولی از تودرتو بودن فراخوانی‌ها با تعریف کردن توابع به صورت جداگانه برای هر مرحله از تودرتو بودن عمیق جلوگیری کردیم.
264265

265-
این روش کار میکند ولی کدش تکه تکه و جدا از هم است که خواندن آن را سخت میکند. همانطور که احتمالا دیدید لازم است در حین خواندن از جایی به جای دیگر بپرید. این طور اصلا راحت نیست مخصوصا اگر به کد آشنا نباشید و ندانید باید برای ادامه کد کجا را بخوانید.
266+
این روش کار می‌کند ولی کدش تکه تکه و جدا از هم است. خواندن آن دشوارتر است و احتمالا متوجه شدید که لازم است در حین خواندن از جایی به جای دیگر بپرید. اینگونه اصلا مناسب نیست مخصوصا اگر به کد آشنا نباشید و ندانید برای ادامه باید کجای کد را بخوانید.
266267

267268
همچنین توابعِ `step*` فقط یکبار استفاده میشوند و فقط برای جلوگیری از بوجود امدن جهنم فراخوانی و تودرتویی بیش از حد تعریف شده اند که باعث بی نظمی زیادی در کد میشوند.
268269

1-js/11-async/03-promise-chaining/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ new Promise(function(resolve, reject) {
120120
});
121121
```
122122

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.
124124

125125
So the output is the same as in the previous example: 1 -> 2 -> 4, but now with 1 second delay between `alert` calls.
126126

1-js/12-generators-iterators/2-async-iterators-generators/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ An example of use (shows commit authors in console):
376376
377377
for await (const commit of fetchCommits('javascript-tutorial/en.javascript.info')) {
378378
379-
console.log(commit.author.login);
379+
console.log(commit.author.name);
380380
381381
if (++count == 100) { // let's stop at 100 commits
382382
break;

0 commit comments

Comments
 (0)