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
چرا؟ بگذارید دوباره ببینیم چه اتفاقی در خط `(*)` میافتد:
17
17
18
-
1. When a property of `str` is accessed, a "wrapper object" is created.
19
-
2. The operation with the property is carried out on it. So, the object gets the `test` property.
20
-
3. The operation finishes and the "wrapper object" disappears.
21
18
22
-
So, on the last line, `str`has no trace of the property. A new wrapper object for every object operation on a string.
19
+
۱. وفتی یک مشخصهی `str`در دسترس قرار میگیرد، یک دربرگیرنده شئ ساخته میشود.
23
20
24
-
Some browsers though may decide to further limit the programmer and disallow to assign properties to primitives at all. That's why in practice we can also see errors at line `(*)`. It's a little bit farther from the specification though.
21
+
۲. عملوند به همراه مشخصه میآید. بنابراین شئ مشخصه `test` را هم دارد.
25
22
26
-
**This example clearly shows that primitives are not objects.**
23
+
۳. عملیات تمام میشود و دربرگیرنده شئ ناپدید میشود.
27
24
28
-
They just can not store data.
25
+
بنابراین، در خط آخر، `str` هیچ نشانهای از مشخصه ندارد. یک شئ دربرگیرنده جدید برای هر عملوند شئ روی رشته حرف.
26
+
27
+
بعضی از مرورگرها حتی ممکن است تصمیم بگیرند که برنامهنویس را محدود کنند و اجازهی دسترسی به تخصیص مشخصهها به دادههای ابتدایی ندهند. به همین علت است که ما میتوانیم همچنین در عمل، خطا در خط `(*)` را ببینیم. البته کمی دور از انتظار است.
29
28
30
-
All property/method operations are performed with the help of temporary objects.
29
+
**این مثال به وضوح نشان میدهد که دادههای ابتدایی، شئ نیستند.**
30
+
31
+
آنها نمیتوانند اطلاعات را ذخیره کنند.
31
32
33
+
تمامی عملوندهای توابع/مشخصهها با کمک اشیا موقتی انجام میشود.
JavaScript allows us to work with primitives (strings, numbers, etc.) as if they were objects.
3
+
.جاوااسکریپت اجازهی استفاده کردن از دادههای ابتدایی مثل رشته حروف، اعداد و غیره، به مثابه یک شئ را به ما میدهد
4
4
5
-
They also provide methods to call as such. We will study those soon, but first we'll see how it works because, of course, primitives are not objects (and here we will make it even clearer).
5
+
همچنین توابعی برای صدا کردن را فراهم میکنند. ما آنها را به زودی مطالعه خواهیم کرد اما ابتدا باید ببینیم که آنها چطور کار میکنند چراکه دادههای ابتدایی، شئ نیستند.(در اینجا حتی این موضوع را روشنتر خواهیم کرد).
6
6
7
-
Let's look at the key distinctions between primitives and objects.
7
+
بیایید به تفاوتهای اصلی بین یک شئ و دادههای ابتدایی بنگریم.
8
8
9
-
A primitive
9
+
یک داده ابتدایی
10
10
11
-
-Is a value of a primitive type.
12
-
-There are 6 primitive types: `string`, `number`, `boolean`, `symbol`, `null` and `undefined`.
11
+
-مقداری از یک نوع ابتداییست.
12
+
-شش نوع ابتدایی وجود دارد: `رشته حروف`، `اعداد`، `متغیر بولی`، `نماد`، `هیچ` و `تعریف نشده`.
13
13
14
-
An object
14
+
یک شئ
15
15
16
-
-Is capable of storing multiple values as properties.
17
-
-Can be created with `{}`, for instance: `{name: "John", age: 30}`. There are other kinds of objects in JavaScript; functions, for example, are objects.
16
+
-قابلیت نگهداری مقادیر چندگانه به عنوان مشخصهها میباشد.
17
+
-میتواند با فلان ساخته شود به عنوان مثال، فلان. انواع دیگری از اشیا هم در جاوااسکریپت داریم: توابع، برای مثال اشیا هستند.
18
18
19
-
One of the best things about objects is that we can store a function as one of its properties.
19
+
یکی از بهترین خصوصیات اشیا این است که ما میتوانیم یک تابع را به عنوان مشخصههای خودش ذخیره کنیم.
20
20
21
21
```js run
22
22
let john = {
@@ -29,74 +29,74 @@ let john = {
29
29
john.sayHi(); // Hi buddy!
30
30
```
31
31
32
-
So here we've made an object `john`with the method`sayHi`.
32
+
ما اینجا یک شئ ساختیم `john`با تابع`sayHi`.
33
33
34
-
Many built-in objects already exist, such as those that work with dates, errors, HTML elements, etc. They have different properties and methods.
34
+
تعداد زیادی اشیا از قبل تعریف شده در حال حاضر وجود دارد مثل آنهایی که با تاریخ، خطاها، المانهای `html` و غیره کار میکنند که توابع و مشخصههای متفاتی هم دارند.
35
35
36
-
But, these features come with a cost!
36
+
اما این خواص هزینهای دارند!
37
37
38
-
Objects are "heavier" than primitives. They require additional resources to support the internal machinery. But as properties and methods are very useful in programming, JavaScript engines try to optimize them to reduce the additional burden.
38
+
اشیا از دادههای ابتدایی وزینتر هستند. آنها به منابعی اضافی برای پشتیبانی از فعالیت درونی سیستم دارند. درحالیکه مشخصهها و توابع در برنامهنویسی خیلی مفید هستند، موتورهای جاوااسکریپت با بهینهسازی سعی در کاهش بار اضافی به وجود آمده دارند.
39
39
40
-
## A primitive as an object
40
+
## یک داده ابتدایی به عنوان یک شئ
41
41
42
-
Here's the paradox faced by the creator of JavaScript:
42
+
تناقضی که سازنده جاوااسکریپت با آن مواجه شده:
43
+
-خیلی کارها هستند که یک نفر بخواهد با دادههای ابتدایی مثل رشته حروف یا اعداد انجام دهد که اگر دسترسی به آنها به عنوان تابع باشد عالی میشود.
43
44
44
-
- There are many things one would want to do with a primitive like a string or a number. It would be great to access them as methods.
45
-
- Primitives must be as fast and lightweight as possible.
45
+
راه حال، اندکی عجیب به نظر میرسد:
46
+
۱. دادههای ابتدایی هنوز دادههای ابتدایی هستند. همانطور خواسته شده، یک مقدار واحد.
47
+
۲. زبان اجازه دسترسی به توابع و مشخصههای رشته حروف، اعداد، متغیرهای بولی و نمادها را میدهد.
48
+
۳. وقتی این اتفاق میافتد، یک دربرگیرنده شی اختصاصی ساخته میشود گه عملکرد اضافی را فراهم میکند و سپس نابود میشود
46
49
47
-
The solution looks a little bit awkward, but here it is:
50
+
دربرگیرندههای اشیا برای هر نوع ابتدایی مختلف هستند به نامهای: `رشته حروف`، `عدد`، `متغیر بولی` و `نماد`. بنابراین آنها مجموعهای از توابع مختلفی را فراهم میسازند.
48
51
49
-
1. Primitives are still primitive. A single value, as desired.
50
-
2. The language allows access to methods and properties of strings, numbers, booleans and symbols.
51
-
3. When this happens, a special "object wrapper" is created that provides the extra functionality, and then is destroyed.
52
+
برای مثال، تابع [str.toUpperCase()](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase) که خروجی آن، حروف کاپیتال شده رشته حرف ورودی میباشد.
52
53
53
-
The "object wrappers" are different for each primitive type and are called: `String`, `Number`, `Boolean` and `Symbol`. Thus, they provide different sets of methods.
54
-
55
-
For instance, there exists a method [str.toUpperCase()](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase) that returns a capitalized string.
56
-
57
-
Here's how it works:
54
+
روش کار به صورت زیر است:
58
55
59
56
```js run
60
57
let str ="Hello";
61
58
62
59
alert( str.toUpperCase() ); // HELLO
63
60
```
64
61
65
-
Simple, right? Here's what actually happens in `str.toUpperCase()`:
62
+
ساده است، نه؟! ببینیم در درون `str.toUpperCase()` چه اتفاقی میافتد:
63
+
64
+
65
+
۱. رشته حرف `str` یک داده ابتداییست. پس در هنگام دسترسی به مشخصهش، یک شی اختصاصی ساخته میشود که مقدار رشته حرف را میداند و توابع مفیدی مثل `toUpperCase()` دارد.
66
66
67
-
1. The string `str` is a primitive. So in the moment of accessing its property, a special object is created that knows the value of the string, and has useful methods, like `toUpperCase()`.
68
-
2. That method runs and returns a new string (shown by `alert`).
69
-
3. The special object is destroyed, leaving the primitive `str` alone.
67
+
۲. این تابع اجرا میشود و یک رشته حرف جدید را خروجی میدهد. (نشان داده شده توسط `alert` .)
70
68
71
-
So primitives can provide methods, but they still remain lightweight.
69
+
۳. شی اختصاصی نابود میشود و داده ابتدایی `str` را تنها میگذارد.
72
70
73
-
The JavaScript engine highly optimizes this process. It may even skip the creation of the extra object at all. But it must still adhere to the specification and behave as if it creates one.
71
+
بنابراین دادههای ابتدایی میتوانند توابع را فراهم سازند و در عین حال سبکوزن هم میمانند.
74
72
75
-
A number has methods of its own, for instance, [toFixed(n)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed) rounds the number to the given precision:
73
+
موتور جاوااسکریپت این پردازه را به شدت بهینه میسازد به طوریکه حتی ممکن است ساخته شدن شئ اضافی را انجام ندهد. اما هنوز بایستی به مشخصات پایبند باشد و مثل ساخته شدن یک شئ رفتار کند.
74
+
75
+
یک عدد هم توابع خودش را دارد، به عنوان مثلا، [toFixed(n)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed) عدد را با دقت خواسته شده گرد میکند:
76
76
77
77
```js run
78
78
let n =1.23456;
79
79
80
80
alert( n.toFixed(2) ); // 1.23
81
81
```
82
82
83
-
We'll see more specific methods in chapters <info:number> and <info:string>.
83
+
در بخشهای <info:number> and <info:string> توابع خاص بیشتری خواهیم دید.
84
84
85
+
````warn header="Constructors `رشته حرف/عدد/متغیر بولی` فقط برای استفادهی درونی هستند"
85
86
86
-
````warn header="Constructors `String/Number/Boolean` are for internal use only"
87
-
Some languages like Java allow us to create "wrapper objects" for primitives explicitly using a syntax like `new Number(1)` or `new Boolean(false)`.
87
+
بعضی از زبانهای برنامهنویسی مثل جاوا به ما اجازه ساختن دربرگیرنده اشیا برای دادههای ابتدایی را میدهند که با کدی مثل `new Number(1)` یا `new Boolean(false)` کار میکنند.
88
88
89
-
In JavaScript, that's also possible for historical reasons, but highly**unrecommended**. Things will go crazy in several places.
89
+
در جاوااسکریپت، به دلایل تاریخی، این فعالیت ممکن است اما**اصلا** توصیه نمیشود. اینطور چیزها ممکن است در برخی جاها اصلا کار نکنند.
90
90
91
-
For instance:
91
+
به عنوان مثال:
92
92
93
93
```js run
94
94
alert( typeof1 ); // "number"
95
95
96
96
alert( typeofnewNumber(1) ); // "object"!
97
97
```
98
98
99
-
And because what follows, `zero`, is an object, the alert will show up:
99
+
اما چون `صفر` یک شئ است، پیغام زیر ظاهر خواهد شد:
100
100
101
101
```js run
102
102
let zero =newNumber(0);
@@ -106,25 +106,27 @@ if (zero) { // zero is true, because it's an object
106
106
}
107
107
```
108
108
109
-
On the other hand, using the same functions `String/Number/Boolean` without `new` is a totally sane and useful thing. They convert a value to the corresponding type: to a string, a number, or a boolean (primitive).
109
+
از سویی دیگر، توابع مشابه `رشته حرف/عدد/متغیر بولی` بدون `new`، به شدت چیز به درد بخوری هستند. آنها یک مقدار را به نوع مربوطهشان تبدیل میکنند: یک رشته حرف، یک عدد یا یک متغیر بولی
110
+
(داده ابتدایی).
111
+
112
+
برای مثال، این کاملا صحیح است:
110
113
111
-
For example, this is entirely valid:
112
114
```js
113
115
let num =Number("123"); // convert a string to number
114
116
```
115
-
````
116
117
117
118
118
-
````warn header="null/undefined have no methods"
119
-
The special primitives `null` and `undefined` are exceptions. They have no corresponding "wrapper objects" and provide no methods. In a sense, they are "the most primitive".
119
+
````warn header=".هیچ/تعریف نشده هیچ تابعی ندارند"````
120
+
121
+
دادههای ابتدایی خاص `هیچ` و `تعریف نشده`، استثنا هستند. آنها هیچ دربرگیرنده اشیا خاصی ندارند و هیچ تابعی را فراهم نمیسازند. به زبانی دیگر، آنها ابتدایی ترین ها هستند.
120
122
121
-
An attempt to access a property of such value would give the error:
123
+
یک تلاش برای دسترسی به مشخصه چنین مقداری، خطای ذیل را میدهد:
122
124
123
125
```js run
124
126
alert(null.test); // error
125
127
````
126
128
127
-
## Summary
129
+
## خلاصه
128
130
129
-
-Primitives except `null` and `undefined` provide many helpful methods. We will study those in the upcoming chapters.
130
-
-Formally, these methods work via temporary objects, but JavaScript engines are well tuned to optimize that internally, so they are not expensive to call.
131
+
-دادههای ابتدایی به جز `هیچ` و `تعریف نشده`، توابع مفید زیادی را فراهم میسازند که ما آنهارا در بخشهای آتی بررسی خواهیم کرد.
132
+
-به طور رسمی، این توابع با اشیا موقتی سر و کار دارند اما موتورهای جاوااسکریپت به بهترین نحو، به صورت درونی، بهینهسازی شدهند، به همین علت صدا زدن آنها دشواری خاصی ندارد.
0 commit comments