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
Copy file name to clipboardExpand all lines: doc/ru/appendix/fromtranslators.md
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -4,7 +4,7 @@
4
4
5
5
Относитесь с **мудростью** к тому, что вы пишете — *важно* знать как работает именно ваш код и как это соответствует приведённым в статье тезисам — и уже из этого вы сможете делать вывод, подходит ли вам тот или иной подход или нет. *Важно* знать как работает [прототипное наследование](#object.prototype), но это не так необходимо, если вы используете функциональный подход или пользуетесь какой-либо сторонней библиотекой. Важно помнить о том, что у вас недостаёт какого-либо конкретного знания и что пробел следует заполнить, но если вы не используете в работе эту часть, вы всё равно можете писать хороший код — ну, если у вас есть талант.
6
6
7
-
К примеру, в статье про [сравнение объектов](#types.equality) авторы рекомендуют использовать только оператор строгого неравенства `===`. Но мы считаем, если вы уверены и осознали, что оба сравниваемых операнда имеют один тип, вы имеете право опустить последний символ `=`. Вы вольны применять строгое неравенство только если вы не уверены в типах операндов (`=== undefined` — это полезный приём). Так в вашем коде будут опасные и безопасные области, но при этом по коду будет явно видно, где вы рассчитываете на переменные одинаковых типов, а где позволяете пользователю вольности.
7
+
К примеру, в статье про [сравнение объектов](#types.equality) авторы рекомендуют использовать только оператор строгого неравенства `===`. Но мы считаем, если вы уверены и осознали, что оба сравниваемых операнда имеют один тип, вы имеете право опустить последний символ `=`. Вы вольны применять строгое неравенство только если вы не уверены в типах операндов (`!== undefined` — это полезный приём). Так в вашем коде будут опасные и безопасные области, но при этом по коду будет явно видно, где вы рассчитываете на переменные одинаковых типов, а где позволяете пользователю вольности.
8
8
9
9
Гонка за оптимизацией — это драматично и правильно, но лучше написать работающий и понятный вам код, а потом уже его оптимизировать и искать узкие места, при необходимости. Оптимизацию необходимо делать, если вы видите явные неудобства для пользователя в тех или иных браузерах или у вас есть супер-крупный проект, которым никогда мешает оптимизация, или вы работаете с какой-либо сверхтребовательной технологией типа WebGL. Данная документация очень поможет вам в определении этих узких мест.
[`instanceof`](#types.instanceof)) is probably the biggest
5
-
design flaw of JavaScript, as it is near of being **completely broken**.
3
+
Оператор `typeof` (вместе с [`instanceof`](#types.instanceof)) — это, вероятно, самая большая недоделка в JavaScript, поскольку, похоже, он **поломан более чем полностью**.
6
4
7
-
Although `instanceof` still has its limited uses, `typeof` really has only one
8
-
practical use case, which does **not** happen to be checking the type of an
9
-
object.
5
+
Хотя `instanceof` еще имеет ограниченное применение, `typeof` на самом деле имеет *только один* практический случай применения, который при этом **не** является проверкой типа объекта.
10
6
11
-
> **Note:** While `typeof` can also be called with a function like syntax
12
-
> i.e. `typeof(obj)`, this is not a function call. The two parenthesis will
13
-
> behave like normal and the return value will be used as the operand of the
14
-
> `typeof` operator. There is **no**`typeof` function.
7
+
> **Замечаение:** Хотя для вызова `typeof` также можно использовать синтаксис функции, т.е. `typeof(obj)`, на самом деле это не функция. Двойные круглые скобки будут работать нормально и возвращаемое значение будет использоваться как операнд оператора `typeof`. Но функции `typeof` — **нет**.
15
8
16
-
### The JavaScript type table
9
+
### Таблица типов JavaScript
17
10
18
-
ValueClass Type
11
+
ЗначениеКлассТип
19
12
-------------------------------------
20
13
"foo" String string
21
14
new String("foo") String object
@@ -28,60 +21,44 @@ object.
28
21
[1,2,3] Array object
29
22
new Array(1, 2, 3) Array object
30
23
new Function("") Function function
31
-
/abc/g RegExp object (function in Nitro/V8)
32
-
new RegExp("meow") RegExp object (function in Nitro/V8)
24
+
/abc/g RegExp object (function в Nitro/V8)
25
+
new RegExp("meow") RegExp object (function в Nitro/V8)
33
26
{} Object object
34
27
new Object() Object object
35
28
36
-
In the above table *Type* refers to the value, that the `typeof` operator returns.
37
-
As can be clearly seen, this value is anything but consistent.
29
+
В таблице выше *Тип* представляет собой значение, возвращаемое оператором `typeof`. Как хорошо видно, это значение может быть абсолютно любым, но не логичным.
38
30
39
-
The *Class* refers to the value of the internal `[[Class]]`property of an object.
31
+
*Класс* представляет собой значение внутреннего свойства `[[Class]]`объекта.
40
32
41
-
> **From the Specification:** The value of `[[Class]]` can be one of the
42
-
> following strings. `Arguments`, `Array`, `Boolean`, `Date`, `Error`,
> **Из спецификации:** Значением `[[Class]]` может быть одна из следующих строк: `Arguments`, `Array`, `Boolean`, `Date`, `Error`, `Function`, `JSON`, `Math`, `Number`, `Object`, `RegExp`, `String`.
44
34
45
-
In order to retrieve the value of `[[Class]]` one has to make use of the
46
-
`toString` method of `Object.prototype`.
35
+
Для того, чтобы получить значение `[[Class]]` необходимо вызвать метод `toString` у `Object.prototype`.
47
36
48
-
### The Class of an object
37
+
### Класс объекта
49
38
50
-
The specification gives exactly one way of accessing the `[[Class]]` value,
51
-
with the use of `Object.prototype.toString`.
39
+
Спецификация предоставляет только один способ доступа к значению `[[Class]]` — с использованием `Object.prototype.toString`.
52
40
53
41
function is(type, obj) {
54
42
var clas = Object.prototype.toString.call(obj).slice(8, -1);
In the above example, `Object.prototype.toString` gets called with the value of
62
-
[this](#function.this) being set to the object whose `[[Class]]` value should be
63
-
retrieved.
49
+
В примере выше `Object.prototype.toString` вызывается со значением [this](#function.this), являющимся объектом, значение [[Class]] которого нужно получить.
64
50
65
-
> **ES5 Note:** For convenience the return value of `Object.prototype.toString`
66
-
> for both `null` and `undefined` was **changed** from `Object` to `Null` and
67
-
> `Undefined` in ECMAScript 5.
51
+
> **ES5 Замечание:** Для удобства в ECMAScript 5 возвращаемое значение `Object.prototype.toString `для `null` и `undefined` было изменено с `Object` на `Null` и `Undefined` соответственно.
68
52
69
-
### Testing for undefined variables
53
+
### Проверка переменных на определённость
70
54
71
55
typeof foo !== 'undefined'
72
56
73
-
The above will check whether `foo` was actually declared or not; just
74
-
referencing it would result in a `ReferenceError`. This is the only thing
75
-
`typeof` is actually useful for.
76
-
77
-
### In conclusion
57
+
Выше проверяется, было ли `foo` действительно объявлено или нет; просто обращение к переменной приведёт к `ReferenceError`. Это единственное, чем на самом деле полезен `typeof`.
78
58
79
-
In order to check the type of an object, it is highly recommended to use
80
-
`Object.prototype.toString`; as this is the only reliable way of doing so.
81
-
As shown in the above type table, some return values of `typeof` are not defined
82
-
in the specification; thus, they can differ across various implementations.
59
+
### Заключение
83
60
84
-
Unless checking whether a variable is defined, `typeof` should be avoided at
85
-
**all costs**.
61
+
Для проверки типа объекта настоятельно рекомендуется использовать` Object.prototype.toString` — это единственный надежный способ. Как показано выше в таблице типов, некоторые возвращаемые `typeof` значения не определены в спецификации: таким образом, они могут отличаться в различных реализациях.
86
62
63
+
Кроме проверки, была ли определена переменная, `typeof` следует избегать **во что бы то ни стало**.
0 commit comments