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
همانطور که از کد میبینیم، با توجه به تبدیل، `user` به رشتهای خودتعریفکننده یا مقداری پول تبدیل میشود. متد `user[Symbol.toPrimitive]` به تنهایی تمام موارد تبدیل را به عهده میگیرد.
134
134
135
-
136
135
## متد toString/valueOf
137
136
138
137
اگر `Symbol.toPrimitive` وجود نداشته باشد، سپس جاوااسکریپت سعی میکند که متدهای `toString` و `valueOf` را پیدا کند:
بیایید این متدها را برای جلوگیری از هر گمراهی خلاصه کنیم:
452
-
=======
453
-
This method resides in the [Annex B](https://tc39.es/ecma262/#sec-string.prototype.substr) of the language specification. It means that only browser-hosted Javascript engines should support it, and it's not recommended to use it. In practice, it's supported everywhere.
این متد دو آرگومان اضافی دارد که در [مستندات](mdn:js/String/localeCompare) مشخص شدهاند که به ما اجازه میدهند تا زبان را مشخص کنیم (به طور پیشفرض از شرایط فعلی بدست میآید، ترتیب حروف به زبان بستگی دارد) و قوانین اضافی را ایجاد کنیم مثل حساسیت بزرگی یا کوچکی حرف یا اینکه به یک صورت با `"a"` و `"á"` رفتار شود و غیره.
555
+
این متد دو آرگومان اضافی دارد که در [مستندات](mdn:js/String/localeCompare) مشخص شدهاند که به ما اجازه میدهند تا زبان را مشخص کنیم (به طور پیشفرض از شرایط فعلی بدست میآید، ترتیب حروف به زبان بستگی دارد) و قوانین اضافی را ایجاد کنیم مثل حساسیت بزرگی یا کوچکی حرف یا اینکه به یک صورت با `"a"` و `"á"` رفتار شود و غیره.
562
556
563
557
## داخلیها، Unicode
564
558
@@ -618,29 +612,29 @@ alert( '𝒳'.charCodeAt(1).toString(16) ); // dcb3, between 0xdc00 and 0xdfff
618
612
619
613
برای پشتیبانی از ترکیبات دلخواه، UTF-16 به ما اجازه میدهد که از چند کاراکتر Unicode استفاده کنیم: کاراکتر پایه که بعد از آن یک یا چند کاراکتر «علامت» میآید که آن را «زیبا میکند».
620
614
621
-
برای مثال، اگر ما یک حرف `S` داشته باشیم که بعد از آن کاراکتر خاص «نقطه بالا» آمده باشد (کد `\u0307`)، به صورت Ṡ نمایش داده میشود.
615
+
برای مثال، اگر ما یک حرف `S` داشته باشیم که بعد از آن کاراکتر خاص «نقطه بالا» آمده باشد (کد `\u0307`)، به صورت Ṡ نمایش داده میشود.
622
616
623
617
```js run
624
-
alert( 'S\u0307' ); //Ṡ
618
+
alert( 'S\u0307' ); //Ṡ
625
619
```
626
620
627
621
اگر ما نیاز به یک علامت اضافی در بالای حرف داشته باشیم (یا پایین آن)، مشکلی نیست، فقط کاراکتر علامت مورد نیاز را اضافه میکنیم.
628
622
629
-
برای مثال، اگر ما یک کاراکتر «نقطه پایین» (کد `\u0323`) را ضمیمه کنیم، سپس ما «حرف S با نقطههایی در بالا و پایین آن» خوهیم داشت: `Ṩ`.
623
+
برای مثال، اگر ما یک کاراکتر «نقطه پایین» (کد `\u0323`) را ضمیمه کنیم، سپس ما «حرف S با نقطههایی در بالا و پایین آن» خوهیم داشت: `Ṩ`.
630
624
631
625
برای مثال:
632
626
633
627
```js run
634
-
alert( 'S\u0307\u0323' ); //Ṩ
628
+
alert( 'S\u0307\u0323' ); //Ṩ
635
629
```
636
630
637
631
این روش انعطاف زیادی را مهیا میکند، اما یک مشکل جالب هم دارد: دو کاراکتر ممکن است که ظاهر یکسانی داشته باشند، اما با ترکیبات Unicode متفاوت نمایش داده شوند.
638
632
639
633
برای مثال:
640
634
641
635
```js run
642
-
let s1 ='S\u0307\u0323'; //Ṩ ،نقطه بالا + نقطه پایین + S
643
-
let s2 ='S\u0323\u0307'; //Ṩ ،نقطه پایین + نقطه بالا + S
636
+
let s1 ='S\u0307\u0323'; //Ṩ ،نقطه بالا + نقطه پایین + S
637
+
let s2 ='S\u0323\u0307'; //Ṩ ،نقطه پایین + نقطه بالا + S
Copy file name to clipboardExpand all lines: 1-js/06-advanced-functions/01-recursion/01-sum-to/solution.md
+1-5Lines changed: 1 addition & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -37,8 +37,4 @@ alert( sumTo(100) );
37
37
38
38
راهحل حلقه از نظر سرعت دوم است. در هر دو نوع بازگشتی و حلقه ما اعداد یکسانی را جمع میزنیم. اما بازگشت، فراخوانیهای تودرتو و مدیریت پشته اجرا را دخیل میکند. همچنین منابع بیشتری مصرف میکند پس کندتر است.
39
39
40
-
<<<<<<< HEAD
41
-
پینوشت دوم: بعضی از موتورها از بهینهسازی «فراخوانی دنبالهدار» پشتیبانی میکنند: اگر یک فراخوانی بازگشتی دقیقا آخرین فراخوانی در تابع باشد (مانند `sumTo(100000)` بالا)، سپس تابع بیرونی نیازی نخواهد داشت که اجرا شدن را ادامه دهد پس موتور نیازی ندارد که زمینهاجرای آن را به یاد بسپارد. این موضوع بار را از دوش حافظه برمیدارد پس محاسبه `sumTo(100000)` ممکن میشود. اما اگر موتور جاوااسکریپت از بهینهسازی فراخوانی دنبالهدار پشتیبانی نکند (اکثر آنها پشتیبانی نمیکنند)، یک ارور ایجاد میشود: از حداکثر اندازه پشته گذشتیم، چون معمولا یک محدودیت برای کل اندازه پشته وجود دارد.
42
-
=======
43
-
P.P.S. Some engines support the "tail call" optimization: if a recursive call is the very last one in the function, with no other calculations performed, then the outer function will not need to resume the execution, so the engine doesn't need to remember its execution context. That removes the burden on memory. But if the JavaScript engine does not support tail call optimization (most of them don't), there will be an error: maximum stack size exceeded, because there's usually a limitation on the total stack size.
44
-
>>>>>>> 1edb0a38330b54d2e1916f5193fc043e6fbbea78
40
+
پینوشت دوم: بعضی از موتورها از بهینهسازی «فراخوانی دنبالهدار» پشتیبانی میکنند: اگر یک فراخوانی بازگشتی دقیقا آخرین فراخوانی در تابع باشد، سپس تابع بیرونی نیازی نخواهد داشت که اجرا شدن را ادامه دهد پس موتور نیازی ندارد که زمینهاجرای آن را به یاد بسپارد. این موضوع بار را از دوش حافظه برمیدارد پس محاسبه ممکن میشود. اما اگر موتور جاوااسکریپت از بهینهسازی فراخوانی دنبالهدار پشتیبانی نکند (اکثر آنها پشتیبانی نمیکنند)، یک ارور ایجاد میشود: از حداکثر اندازه پشته گذشتیم، چون معمولا یک محدودیت برای کل اندازه پشته وجود دارد.
Copy file name to clipboardExpand all lines: 1-js/11-async/02-promise-basics/article.md
-10Lines changed: 0 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -35,13 +35,8 @@ let promise = new Promise(function(resolve, reject) {
35
35
36
36
شیء `promise` که توسط سازنده `new Promise` برگردانده شده است دارای این ویژگیهای داخلی است:
37
37
38
-
<<<<<<< HEAD
39
38
-`state` — در ابتدا `"pending"` سپس با فراخوانی، `resolve` به `"fulfilled"` یا زمانی که `reject` فراخوانی میشود به `"rejected"` تغییر میکند.
40
39
-`result` — در ابتدا `undefined`، سپس با فراخوانی `resolve(value)` به `value` یا زمانی که `reject(error)` فراخوانی می شود به `error` تغییر میکند.
41
-
=======
42
-
-`state` — initially `"pending"`, then changes to either `"fulfilled"` when `resolve` is called or `"rejected"` when `reject` is called.
43
-
-`result` — initially `undefined`, then changes to `value` when `resolve(value)` is called or `error` when `reject(error)` is called.
44
-
>>>>>>> 1edb0a38330b54d2e1916f5193fc043e6fbbea78
45
40
46
41
بنابراین اجراکننده در نهایت `promise` را به یکی از این حالات منتقل میکند:
47
42
@@ -273,7 +268,6 @@ new Promise((resolve, reject) => {
273
268
new Promise((resolve, reject) => {
274
269
throw new Error("خطا");
275
270
})
276
-
<<<<<<< HEAD
277
271
.finally(() => alert("Promise آماده است")) // این اول فعال میشود
278
272
.catch(err => alert(err)); // <-- خطا را نمایش میدهد .catch
279
273
```
@@ -288,11 +282,7 @@ new Promise((resolve, reject) => {
288
282
- اگر یک کنترلکننده `finally` چیزی برگرداند، نادیده گرفته میشود.
289
283
- زمانی که `finally` خطایی برگراند، سپس اجرای برنامه به نزدیکترین کنترلکننده خطا میرود.
290
284
291
-
<<<<<<< HEAD
292
285
این خواص مفید هستند و اگر ما تعیین کنیم که `finally` در نهایت چگونه قرار است استفاده شود کاری میکنند که همه چیز به درستی کار کند: برای روند تمیزکاری عمومی.
293
-
=======
294
-
These features are helpful and make things work just the right way if we use `finally` how it's supposed to be used: for generic cleanup procedures.
295
-
>>>>>>> 1edb0a38330b54d2e1916f5193fc043e6fbbea78
296
286
297
287
````smart header="ما می توانیم اجراکنندهها را به Promiseهای تسویهشده متصل کنیم"
298
288
اگر یک promise در حالت انتظار است، کنترلکنندههای `then/catch/finally.` منتظر آن میمانند.
Copy file name to clipboardExpand all lines: 2-ui/2-events/02-bubbling-and-capturing/article.md
+5-39Lines changed: 5 additions & 39 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -126,40 +126,26 @@
126
126
2. فاز هدف -- رویداد به عنصر هدف میرسد.
127
127
3. فاز بالارفتن -- رویداد از عنصر بالا میرود.
128
128
129
-
<<<<<<< HEAD
130
129
این یک عکس از یک کلیک روی `<td>` داخل یک جدول است، که شامل مشخصات زیر است
131
-
=======
132
-
Here's the picture, taken from the specification, of the capturing `(1)`, target `(2)` and bubbling `(3)` phases for a click event on a `<td>` inside a table:
133
-
>>>>>>> 1edb0a38330b54d2e1916f5193fc043e6fbbea78
134
130
135
131

136
132
137
133
اینگونه که: برای یک کلیک روی `<td>` رویداد اول از زنجیره اجداد پایین میآید تا به عنصر برسد(گرفتن). بعد به عنصر هدف میرسد و بعد بالا میرود (بالارفتن) و کنترلکنندهها را در مسیر صدا میزند.
138
134
139
-
<<<<<<< HEAD
140
-
**قبلا تنها درباره بالارفتن رویداد صحبت کردیم، چون که فاز گرفتن به ندرت استفاده میشود. معمولا برای ما نمایان نیست.**
135
+
قبلا تنها درباره بالارفتن رویداد صحبت کردیم، چون که فاز گرفتن به ندرت استفاده میشود. معمولا برای ما نمایان نیست.
141
136
142
137
کنترلکنندههایی که با استفاده از خاصیت `on<event>` یا صفتهای HTML یا با متد با دو ورودی `addEventListener(event, handler)` اضافه میشوند، چیزی درباره گرفتن نمیدانند. فقط در فازهای دوم و سوم اجرا میشوند.
143
-
=======
144
-
Until now, we only talked about bubbling, because the capturing phase is rarely used.
145
-
146
-
In fact, the capturing phase was invisible for us, because handlers added using `on<event>`-property or using HTML attributes or using two-argument `addEventListener(event, handler)` don't know anything about capturing, they only run on the 2nd and 3rd phases.
147
-
>>>>>>> 1edb0a38330b54d2e1916f5193fc043e6fbbea78
148
138
149
139
برای گرفتن یک رویداد در فاز گرفتن، باید که ورودی سوم `addEventListener` را `true` قرار دهیم.
150
140
151
-
<<<<<<< HEAD
152
-
برای آخرین ورودی که اختیاری دو مقدار میتواند وجود داشته باشد:
153
-
=======
154
141
```js
155
142
elem.addEventListener(..., {capture:true})
156
143
157
144
// or, just "true" is an alias to {capture: true}
158
145
elem.addEventListener(..., true)
159
146
```
160
147
161
-
There are two possible values of the `capture` option:
162
-
>>>>>>> 1edb0a38330b54d2e1916f5193fc043e6fbbea78
148
+
برای آخرین ورودی که اختیاری دو مقدار میتواند وجود داشته باشد:
163
149
164
150
- اگر `false` باشد (پیشفرض)، کنترلکننده در فاز بالارفتن مشخص میشود.
165
151
- اگر `true` باشد، کنترلکننده در فاز گرفتن مشخص میشود.
@@ -196,29 +182,12 @@ There are two possible values of the `capture` option:
196
182
197
183
اگر روی `<p>` کلیک کنیم، بعد ترتیب به این صورت است:
1.`HTML` -> `BODY` -> `FORM` -> `DIV -> P` (capturing phase, the first listener):
205
-
2.`P` -> `DIV` -> `FORM` -> `BODY` -> `HTML` (bubbling phase, the second listener).
206
-
207
-
Please note, the `P` shows up twice, because we've set two listeners: capturing and bubbling. The target triggers at the end of the first and at the beginning of the second phase.
توجه کنید که `P` دوبار نمایش داده میشود: در پایان گرفتن و در زمان شروع بالارفتن.
211
189
212
-
<<<<<<< HEAD
213
190
خاصیت `event.eventPhase` به ما شماره فازی که در آن رویداد فراخوانی شده را میگوید. اما به ندرت استفاده میشود چون معمولا در کنترلکننده آنرا میدانیم.
214
-
=======
215
-
```smart header="The `event.stopPropagation()` during the capturing also prevents the bubbling"
216
-
The `event.stopPropagation()` method and its sibling `event.stopImmediatePropagation()` can also be called on the capturing phase. Then not only the futher capturing is stopped, but the bubbling as well.
217
-
218
-
In other words, normally the event goes first down ("capturing") and then up ("bubbling"). But if `event.stopPropagation()` is called during the capturing phase, then the event travel stops, no bubbling will occur.
219
-
```
220
-
221
-
>>>>>>> 1edb0a38330b54d2e1916f5193fc043e6fbbea78
222
191
223
192
## خلاصه
224
193
@@ -236,11 +205,8 @@ In other words, normally the event goes first down ("capturing") and then up ("b
236
205
237
206
هر کنترلکنندهای میتواند رویداد را با `event.stopPropagation()` متوقف کند، اما این روش پیشنهاد نمیشود چون که همیشه مطمئن نیستیم که رویداد را در مرحلههای بالاتر نیاز نخواهیم داشت، شاید برای کارهایی کاملا متفاوت.
238
207
239
-
<<<<<<< HEAD
240
208
فاز گرفتن به ندرت استفاده میشود، معمولا رویدادها را در فاز بالارفتن کنترل میکنیم. و یک منطق پشت آن است.
241
-
=======
242
-
The capturing phase is used very rarely, usually we handle events on bubbling. And there's a logical explanation for that.
243
-
>>>>>>> 1edb0a38330b54d2e1916f5193fc043e6fbbea78
209
+
244
210
245
211
در دنیای واقعی، زمانی که تصادفی رخ میدهد، مقامات محلی زودتر عکس العمل نشان میدهند. آنها بهتر از هر کس دیگری درباره محلی که این حادثه رخ داده اطلاعات دارند. بعد از آنها در صورت نیاز مقامات بالاتر.
0 commit comments