Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions 1-js/02-first-steps/05-types/1-string-quotes/solution.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ Backticks عبارت داخل `{...}$` را در رشته قرار می‌دهد
```js run
let name = "Ilya";

// عبارت عدد 1 است
alert( `سلام ${1}` ); // 1 سلام
// عبارت، عدد 1 است
alert( `hello ${1}` ); // hello 1

// است "name" عبارت رشته
alert( `سلام ${"name"}` ); // name سلام
// است "name" عبارت، رشته
alert( `hello ${"name"}` ); // hello name

// عبارت یک متغیر است، آن را داخل رشته قرار می‌دهد
alert( `سلام ${name}` ); // Ilya سلام
// عبارت، یک متغیر است، مقدار آن را داخل رشته قرار می‌دهد
alert( `hello ${name}` ); // hello Ilya
```
6 changes: 3 additions & 3 deletions 1-js/02-first-steps/05-types/1-string-quotes/task.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ importance : 5
```js
let name = "Ilya";

alert( `سلام ${1}` ); // ?
alert( `hello ${1}` ); // ?

alert( `سلام ${"name"}` ); // ?
alert( `hello ${"name"}` ); // ?

alert( `سلام ${name}` ); // ?
alert( `hello ${name}` ); // ?
```
32 changes: 16 additions & 16 deletions 1-js/02-first-steps/05-types/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ n = 12.345;

عملیات مختلفی در مورد اعداد وجود دارد مانند ضرب `*` ، تقسیم `/` ، جمع `+` ، تفریق `-` و غیره.

همینطور بجز اعداد معمولی، اعداد خاصی نیز وجود دارند که به همین نوع از متغیرها مربوط می‌شوند. یعنی: `Infinity` (بی‌نهایت)، `-Infinity` (منفی بی‌نهایت) و `NaN`.
همینطور بجز اعداد معمولی، اعداد خاصی نیز وجود دارند که به همین نوع از متغیرها مربوط می‌شوند. یعنی: `Infinity` (بی‌نهایت)، `Infinity-` (منفی بی‌نهایت) و `NaN`.

- Infinity بیانگر علامت ریاضیاتیِ [بی‌نهایت](https://fa.wikipedia.org/wiki/بی%E2%80%8Cنهایت) ∞ است. این مقدار خاص بوده که از هر عدد دیگری بزرگتر است.

Expand All @@ -43,23 +43,23 @@ n = 12.345;
- `NaN` بیانگر یک اشکال محاسباتی است. این مقدار نتیجه یک عملیات ریاضیاتی غلط یا تعریف‌نشده است. برای نمونه:

```js run
alert( "چیزی غیر از عدد" / 2 ); // NaN ،چنین تقسیمی اشتباه است
alert( "not a number (چیزی غیر از عدد)" / 2 ); // NaN ،چنین تقسیمی اشتباه است
```

`NaN` جسبنده است. هر عمل ریاضیاتی روی `NaN` مقدار `NaN` را برمی‌گرداند:

```js run
alert( NaN + 1 ); // NaN
alert( 3 * NaN ); // NaN
alert( "چیزی غیر از عدد" / 2 - 1 ); // NaN
alert( "not a number (چیزی غیر از عدد)" / 2 - 1 ); // NaN
```

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

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

اسکریپت ما هیچگاه با خطای مرگباری مواجه نخواهد شد. در بدترین حالت `NaN` را به عنوان نتیجه خواهیم گرفت.
اسکریپت ما هیچگاه با خطای مرگباری (fatal error) مواجه نخواهد شد. در بدترین حالت `NaN` را به عنوان نتیجه خواهیم گرفت.
```

مقدارهای عددی خاص به طور رسمی به نوع "number" تعلق دارند. البته آنها به معنای واقعی این کلمه، عدد نیستند.
Expand All @@ -70,7 +70,7 @@ n = 12.345;

در جاوااسکریپت، نوع "number" نمی‌تواند مقدارهای صحیح بیشتر از <code>(2<sup>53</sup>-1)</code> (برابر با `9007199254740991`) یا اعداد منفی کمتر از <code>-(2<sup>53</sup>-1)</code> برای اعداد منفی را نشان دهد.

اگر بخواهیم خیلی دقیق باشیم، نوع "number" می‌تواند اعداد صحیح بزرگ‌تر براذخیره کند (اعدادی تا <code>1.7976931348623157 * 10<sup>308</sup></code>) اما بیرون از محدوده امن عدد صحیح <code>±(2<sup>53</sup>-1)</code>، خطای دقت به وجود می‌آید چون تمام رقم‌ها درون حافظه 64 بیتی جای نمی‌گیرند. بنابراین یک مقدار تقریبی ممکن است ذخیره شود.
اگر بخواهیم خیلی دقیق باشیم، نوع "number" می‌تواند اعداد صحیح بزرگ‌تر را ذخیره کند (اعدادی تا <code>1.7976931348623157 * 10<sup>308</sup></code>) اما بیرون از محدوده امن عدد صحیح <code>(2<sup>53</sup>-1)±</code>، خطای دقت به وجود می‌آید چون تمام رقم‌ها درون حافظه 64 بیتی جای نمی‌گیرند. بنابراین یک مقدار تقریبی ممکن است ذخیره شود.

برای مثال، این دو عدد (کمی بیشتر از محدوده امن) یکسان هستند:

Expand All @@ -81,7 +81,7 @@ console.log(9007199254740991 + 2); // 9007199254740992

بنابراین، تمام اعداد صحیح فرد که از <code>(2<sup>53</sup>-1)</code> بیشتر هستند نمی‌توانند در نوع "number" ذخیره شوند.

محدوده <code>±(2<sup>53</sup>-1)</code> برای بیشتر کارها کافی است، اما گاهی به اعداد بسیار بزرگ نیاز داریم، برای مثال در کریپتوگرافی یا timestamps با دقت میکرو ثانیه.
محدوده <code>(2<sup>53</sup>-1)±</code> برای بیشتر کارها کافی است، اما گاهی به اعداد بسیار بزرگ نیاز داریم، برای مثال در کریپتوگرافی یا timestamps با دقت میکرو ثانیه.

نوع `BigInt` برای نمایش دادن اعداد صحیح که طول دلخواهی دارند به تازگی به زبان اضافه شده است.

Expand Down Expand Up @@ -125,15 +125,15 @@ Backticks کوتیشن‌هایی با "قابلیت‌های گسترده" هس
let name = "John";

// تعبیه کردن یک متغیر
alert( `سلام، *!*${name}*/!*!` ); // !John ،سلام
alert( `Hello, *!*${name}*/!*!` ); // Hello, John!

// تعبیه کردن یک عبارت
alert( `نتیجه *!*${1 + 2}*/!* است` ); // نتیجه 3 است
alert( `the result is *!*${1 + 2}*/!*` ); // the result is 3 (ترجمه: نتیجه 3 است)
```

عبارتی که در `${…}` قرار می‌گیرد اجرا شده و نتیجه آن در رشته مورد نظر قرار می‌گیرد. ما می‌توانیم هر چیزی را درون آن قرار دهیم: یک متغیر مثل `name` یا بک عبارت محاسباتی مثل `1 + 2` یا حتی چیزی پیچیده‌تر.
عبارتی که در `{…}$` قرار می‌گیرد اجرا شده و نتیجه آن در رشته مورد نظر قرار می‌گیرد. ما می‌توانیم هر چیزی را درون آن قرار دهیم: یک متغیر مثل `name` یا یک عبارت محاسباتی مثل `1 + 2` یا حتی چیزی پیچیده‌تر.

توجه داشته باشید که این فقط می‌تواند در Backticks انجام شود. کوتیشن‌های دیگر این قابلیت تعبیه کردن را ندارند:
توجه داشته باشید که این فقط می‌تواند در Backticks انجام شود. کوتیشن‌های دیگر قابلیت تعبیه کردن را ندارند:
```js run
alert( "the result is ${1 + 2}" ); // the result is ${1 + 2} (کاری نمی‌کنند double quotes)
```
Expand Down Expand Up @@ -216,9 +216,9 @@ alert(x); // "undefined"

نوع `object` (شیء) از انواع خاص است.

انواع مختلف داده که تا اینجا مطالعه کردیم از انواع «اولیه» بودند چرا که مقدار آنها فقط شامل یک چیز می‌شد (رشته یا عدد یا هر چیز دیگری). در مقابل، شیءها برای ذخیره مجموعه‌ای از داده‌ها به شکلی پیچیده‌تر استفاده می‌شوند.
انواع مختلف داده که تا اینجا مطالعه کردیم از انواع «primitive» (اولیه) بودند چرا که مقدار آنها فقط شامل یک چیز می‌شد (رشته یا عدد یا هر چیز دیگری). در مقابل، شیءها برای ذخیره مجموعه‌ای از داده‌ها به شکلی پیچیده‌تر استفاده می‌شوند.

شیءها به حدی مهم هستند که لایق طرز برخورد ویژه‌ای هستند. ما بعدا در فصل <info:object> به سراغ آنها خواهیم رفت، بعد از اینکه درباره انواع اولیه بیشتر یاد گرفتیم.
شیءها به حدی مهم هستند که لایق طرز برخورد ویژه‌ای هستند. ما بعدا در فصل <info:object> به سراغ آنها خواهیم رفت، بعد از اینکه درباره انواع primitive بیشتر یاد گرفتیم.

نوع `symbol` برای ایجاد شناسه‌های منحصر به فرد برای شیءها مورد استفاده قرار می‌گیرد. به منظور تکمیل این بخش این نوع داده را نیز در اینجا عنوان می‌کنیم اما جزییات آن را تا زمانی که شیءها را بشناسیم به آینده موکول می‌کنیم.

Expand Down Expand Up @@ -270,7 +270,7 @@ typeof alert // "function" (3)
```smart header="سینتکس `typeof(x)`"
شاید سینتکس دیگری را دیده باشید: `typeof(x)`. این با `typeof x` یکسان است.

برای اینکه واضح باشد: `typeof` یک اپراتور است نه یک تابع. اینجا پرانتزها بخشی از `typeof` نیستند. این نوعی از پرانتز است که برای گروه‌بندی ریاضیاتی استفاده می‌شود.
برای اینکه واضح باشد: `typeof` یک عملگر است نه یک تابع. اینجا پرانتزها بخشی از `typeof` نیستند. این نوعی از پرانتز است که برای گروه‌بندی ریاضیاتی استفاده می‌شود.

معمولا چنین پرانتزهایی یک عبارت ریاضیاتی، مانند `(2 + 2)`، را شامل می‌شوند اما اینجا آن‌ها فقط آرگومان `(x)` را دارند. از لحاظ سینتکس، آن‌ها به ما این امکان را می‌دهند که از وجود فاصله بین عملگر `typeof` و آرگومانش جلوگیری کنیم و بعضی از اشخاص آن را دوست دارند.

Expand All @@ -282,14 +282,14 @@ typeof alert // "function" (3)
در جاوااسکریپت 8 نوع داده پایه‌ای وجود دارد.

- هفت نوع داده اولیه:
- `number` برای اعداد از هر دسته‌ای: عدد صحیح یا اعشاری، اعداد صحیح به <code>±(2<sup>53</sup>-1)</code> محدود می‌شوند.
- `number` برای اعداد از هر دسته‌ای: عدد صحیح یا اعشاری، اعداد صحیح به <code>(2<sup>53</sup>-1)±</code> محدود می‌شوند.
- `bigint` برای اعداد صحیح با طول دلخواه است.
- `string` برای رشته‌ها. یک رشته ممکن است صفر کاراکتر یا بیشتر داشته باشد، هیج نوع جداگانه‌ی تک کاراکتری وجود ندارد.
- `boolean` برای `true`/`false`.
- `null` برای مقدارهای نامشخص -- یک نوع مستقل که فقط یک مقدار `null` دارد.
- `undefined` برای مقدارهای تخصیص نیافته -- یک نوع مستقل که فقط یک مقدار `undefined` دارد.
- `symbol` برای شناسه‌های یکتا.
- و یک نوع داده غیر اولیه:
- و یک نوع داده non-primitive :
- `object` برای ساختارهای پیچیده‌تر داده.

عملگر `typeof` به شما اجازه می‌دهد نوع مقدار ذخیره شده در یک متغیر را تشخصی دهید.
Expand All @@ -298,4 +298,4 @@ typeof alert // "function" (3)
- یک رشته شامل اسم نوع را برمی‌گرداند، مثل `"string"`.
- برای `null` مقدار `"object"` را نمایش می‌دهد -- این یک خطا در خودِ زبان است، در واقع null یک object نیست.

در فصل‌های بعدی، ما روی نوع‌های "اولیه" تمرکز می‌کنیم و هنگامی که با آنها بیشتر آشنا شدیم، به سراغ شیءها می‌رویم.
در فصل‌های بعدی، ما روی نوع‌های "primitive" تمرکز می‌کنیم و هنگامی که با آنها بیشتر آشنا شدیم، به سراغ شیءها می‌رویم.