Skip to content

Commit e9c11b7

Browse files
committed
translation of primitive-methods
1 parent 61b57df commit e9c11b7

3 files changed

Lines changed: 84 additions & 85 deletions

File tree

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,30 @@
1-
2-
Try running it:
1+
Попробуйте запустить код:
32

43
```js run
5-
let str = "Hello";
4+
let str = "Привет";
65

76
str.test = 5; // (*)
87

9-
alert(str.test);
8+
alert(str.test);
109
```
1110

12-
There may be two kinds of result:
13-
1. `undefined`
14-
2. An error.
11+
Здесь может быть два результата:
1512

16-
Why? Let's replay what's happening at line `(*)`:
13+
1. `undefined`
14+
2. Ошибка
1715

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.
16+
Почему? Давайте посмотрим что происходит на линии `(*)`:
2117

22-
So, on the last line, `str` has no trace of the property. A new wrapper object for every object operation on a string.
18+
1. В момент обращения к свойству `str` создается "объект-обертка".
19+
2. Операция со свойством выполняется на объекте. Таким образом, объект получает свойство `test`.
20+
3. Операция заканчивается и "объект-обертка" удаляется.
2321

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.
22+
Выходит, на последней линии `str` больше не имеет свойства `test`. При каждой объектной операции со строкой создается новый "объект-обертка".
2523

26-
**This example clearly shows that primitives are not objects.**
24+
Некоторые браузеры могут решить еще более ограничить возможности пользователя и запретить присваивание свойств примитивным типам. Поэтому, на практике мы можем встречать ошибки на линии `(*)`. Хотя, это далековато от правил языка.
2725

28-
They just can not store data.
26+
**Данный пример наглядно показывает, что примитивы не являются объектами.**
2927

30-
All property/method operations are performed with the help of temporary objects.
28+
Они просто не могут хранить данные.
3129

30+
Все операции со свойствами/методами выполняются с помощью временных объектов.
Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
1-
importance: 5
1+
важность: 5
22

33
---
44

5-
# Can I add a string property?
5+
# Могу ли я добавить свойство Строки?
66

7-
8-
Consider the following code:
7+
Взгляните на следующий код:
98

109
```js
11-
let str = "Hello";
10+
let str = "Привет";
1211

1312
str.test = 5;
1413

1514
alert(str.test);
1615
```
1716

18-
How do you think, will it work? What will be shown?
17+
Как вы думаете, это сработает? Что выведется на экран?
Lines changed: 64 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,130 +1,131 @@
1-
# Methods of primitives
1+
# Методы с примитивными типами данных
22

3-
JavaScript allows us to work with primitives (strings, numbers, etc.) as if they were objects.
3+
Javascript позволяет нам работать с примитивными типами данных (далее: примитивы) (строки, числа, и т.д) так, как если бы они были объектами.
44

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+
Также, примитивы имеют методы объектов. Их мы изучим позже, но сначала мы разберем как это все работает, потому что, конечно, примитивы - не объекты (и здесь мы разберем это поподробнее).
66

7-
Let's look at the key distinctions between primitives and objects.
7+
Давайте взглянем на ключевые различия между примитивами и объектами.
88

9-
A primitive
9+
Примитив
1010

11-
- Is a value of a primitive type.
12-
- There are 6 primitive types: `string`, `number`, `boolean`, `symbol`, `null` and `undefined`.
11+
- Это значение «примитивного» типа.
12+
- Есть 6 примитивных типов: `string`, `number`, `boolean`, `symbol`, `null` и `undefined`.
1313

14-
An object
14+
Объект
1515

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+
- Объявляется при помощи фигурных скобок `{}`, например: `{name: "Рома", age: 30}`. В JavaScript есть и другие виды объектов; например, функции тоже являются объектами.
1818

19-
One of the best things about objects is that we can store a function as one of its properties.
19+
Одна из лучших особенностей объектов это то, что мы можем хранить метод как одно из свойств объекта.
2020

2121
```js run
22-
let john = {
23-
name: "John",
22+
let roma = {
23+
name: "Рома",
2424
sayHi: function() {
25-
alert("Hi buddy!");
25+
alert("Привет, дружище!");
2626
}
2727
};
2828

29-
john.sayHi(); // Hi buddy!
29+
roma.sayHi(); // Привет, дружище!
3030
```
3131

32-
So here we've made an object `john` with the method `sayHi`.
32+
Здесь мы создали объект `roma` с методом `sayHi`.
3333

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 элементами, и т.д. Они имеют различные свойства и методы.
3535

36-
But, these features come with a cost!
36+
Однако, у этих особенностей есть определенная цена!
3737

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+
Объекты «тяжелее» примитивов. Они нуждаются в дополнительных ресурсах для поддержания внутренней структуры. Но, так как свойства и методы очень полезны в программировании, движки JavaScript оптимизируют их для уменьшения дополнительной нагрузки.
3939

40-
## A primitive as an object
40+
## Примитив как объект
4141

42-
Here's the paradox faced by the creator of JavaScript:
42+
Вот парадокс, с которым столкнулся создатель JavaScript:
4343

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.
44+
- Есть много вещей, которые хотелось бы сделать с примитивами как string или number. Было бы замечательно если бы мы могли вызывать эти «вещи» так же, как методы.
45+
- Примитивы должны быть как можно легкими и быстрыми.
4646

47-
The solution looks a little bit awkward, but here it is:
47+
Вот решение, хотя выглядит оно немного неуклюже:
4848

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.
49+
1. Примитивы остаются примитивами. Одно значение, как и хотелось.
50+
2. Язык позволяет иметь доступ к методам и свойствам strings, numbers, booleans и symbols.
51+
3. При этом, создается специальный "объект-обертка", который предоставляет дополнительную функциональность, а после, удаляется.
5252

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.
53+
Каждый примитив имеет свой собственный "объект-обертку", которые называются: `String`, `Number`, `Boolean` и `Symbol`. Таким образом,они имеют разный набор методов.
5454

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.
55+
К примеру, существует метод [str.toUpperCase()](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase), который возвращает cтроку в верхнем регистре.
5656

57-
Here's how it works:
57+
Вот как он работает:
5858

5959
```js run
60-
let str = "Hello";
60+
let str = "Привет";
6161

62-
alert( str.toUpperCase() ); // HELLO
62+
alert(str.toUpperCase()); // ПРИВЕТ
6363
```
6464

65-
Simple, right? Here's what actually happens in `str.toUpperCase()`:
65+
Легко, правда? Вот, что на самом деле происходит в `str.toUpperCase()`:
6666

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+
1. Строка `str` - примитив. В момент обращения к его свойству, создается специальный объект, который знает значение строки и имеет такие полезные методы, как `toUpperCase()`.
68+
2. Этот метод запускается и возвращает новую строку (показывается в `alert`).
69+
3. Специальный объект удаляется, оставляя только примитив `str`.
7070

71-
So primitives can provide methods, but they still remain lightweight.
71+
Получается, что примитивы могут предоставлять методы, и в то же время оставаться «лёгкими».
7272

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.
73+
Движок JavaScript очень оптимизирует этот процесс. Он даже может пропустить создание специального объекта. Однако, он все же должен придерживаться спецификаций и работать так, как будто он его создает.
7474

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:
75+
Число имеет собственный набор методов. Например, [toFixed(n)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed) округляет число до n знаков после запятой.
7676

7777
```js run
7878
let n = 1.23456;
7979

80-
alert( n.toFixed(2) ); // 1.23
80+
alert(n.toFixed(2)); // 1.23
8181
```
8282

83-
We'll see more specific methods in chapters <info:number> and <info:string>.
83+
Более подробно с различными свойствами и методами мы познакомимся в главах <info:number> и <info:string>.
8484

85+
``warn header="Конструкторы `String/Number/Boolean` предназначены только для внутреннего пользования"
86+
Некоторые языки, такие как Java позволяют создание "объектов-оберток" для примитивов при помощи такого синтаксиса как `new Number(1)` или `new Boolean(false)`.
8587

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)`.
88+
В JavaScript, это тоже возможно по историческим причинам, но очень **не рекомендуется**. В некоторых местах последствия могут быть катастрофическими.
8889

89-
In JavaScript, that's also possible for historical reasons, but highly **unrecommended**. Things will go crazy in several places.
90-
91-
For instance:
90+
Например:
9291

9392
```js run
94-
alert( typeof 1 ); // "number"
93+
alert(typeof 1); // "число"
9594

96-
alert( typeof new Number(1) ); // "object"!
95+
alert(typeof new Number(1)); // "объект"!
9796
```
9897

99-
And because what follows, `zero`, is an object, the alert will show up:
98+
И так как `zero` - это объект, модальное окно выведется на экран.
10099

101100
```js run
102101
let zero = new Number(0);
103102

104-
if (zero) { // zero is true, because it's an object
105-
alert( "zero is truthy?!?" );
103+
if (zero) {
104+
// zero возвращает "true", так как является объектом
105+
alert("zero имеет «истинное» значение?!?");
106106
}
107107
```
108108

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+
С другой стороны, использование функций `String/Number/Boolean` без оператора `new` является вполне разумной и полезной вещью. Они превращают значение в соответствующий примитивный тип: в строку, в число, в булевой тип.
110+
111+
К примеру, следующее вполне легально:
110112

111-
For example, this is entirely valid:
112113
```js
113-
let num = Number("123"); // convert a string to number
114+
let num = Number("123"); // превращает строку в число
114115
```
115-
````
116116

117+
`````
117118
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".
120119
121-
An attempt to access a property of such value would give the error:
120+
````warn header="null/undefined не имеют методов"
121+
Особенные примитивы `null` and `undefined` являются исключениями. У них нет соответствующих "объектов-оберток" и они не имеют никаких методов. В некотором смысле, они "самые примитивные".
122122
123+
Попытка доступа к свойствам такого значения возвратит ошибку:
123124
```js run
124-
alert(null.test); // error
125-
````
125+
alert(null.test); // ошибка
126+
`````
126127

127-
## Summary
128+
## Итого
128129

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.
130+
- Все примитивы кроме `null` и `undefined` предоставляют множество полезных методов. Мы познакомимся с ними поближе в следующих главах.
131+
- Формально, эти методы работают с помощью временных объектов, но движки JavaScript очень хорошо оптимизируют этот процесс внутренне, так что их вызов не требует много ресурсов.

0 commit comments

Comments
 (0)