|
1 | 1 | ## Оператор `typeof`
|
2 | 2 |
|
3 |
| -Оператор `typeof` (вместе с [`instanceof`](#types.instanceof)) — это, вероятно, самая большая недоделка в JavaScript, поскольку, похоже, он **поломан более чем полностью**. |
| 3 | +Оператор `typeof` (вместе с [`instanceof`](#types.instanceof)) — это, вероятно, самая большая недоделка в JavaScript, поскольку выходит, что он **поломан почти полностью**. |
4 | 4 |
|
5 |
| -Хотя `instanceof` еще имеет ограниченное применение, `typeof` на самом деле имеет *только один* практический случай применения, который при всём при этом **не** является проверкой типа объекта. |
| 5 | +Хотя `instanceof` используется достаточно редко, `typeof` вообще имеет один практический случай применения, который при всём при этом неожиданно **не** оказывается проверкой типа объекта. |
6 | 6 |
|
7 | 7 | > **Замечаение:** Хотя для вызова `typeof` также можно использовать синтаксис функции, т.е. `typeof(obj)`, на самом деле это не функция. Двойные круглые скобки будут работать нормально и возвращаемое значение будет использоваться как операнд оператора `typeof`. Но функции `typeof` — **не существует**.
|
8 | 8 |
|
|
26 | 26 | {} Object object
|
27 | 27 | new Object() Object object
|
28 | 28 |
|
29 |
| -В таблице выше *Тип* представляет собой значение, возвращаемое оператором `typeof`. Как хорошо видно, это значение может быть абсолютно любым, но не логичным результатом. |
| 29 | +В таблице выше, в колонке *Тип* приводится значение, возвращаемое оператором `typeof` для указанного объекта. Как хорошо заметно, это значение может быть чем угодно, но не ожидаемым результатом. |
30 | 30 |
|
31 |
| -*Класс* представляет собой значение внутреннего свойства `[[Class]]` объекта. |
| 31 | +В колонке *Класс* приведено значение внутреннего свойства объекта `[[Class]]`. |
32 | 32 |
|
33 | 33 | > **Из спецификации:** Значением `[[Class]]` может быть одна из следующих строк: `Arguments`, `Array`, `Boolean`, `Date`, `Error`, `Function`, `JSON`, `Math`, `Number`, `Object`, `RegExp`, `String`.
|
34 | 34 |
|
35 |
| -Для того, чтобы получить значение `[[Class]]` необходимо вызвать метод `toString` у `Object.prototype`. |
| 35 | +Чтобы получить значение `[[Class]]` нужно применить к объекту метод `toString` из `Object.prototype`. |
36 | 36 |
|
37 | 37 | ### Класс объекта
|
38 | 38 |
|
|
46 | 46 | is('String', 'test'); // true
|
47 | 47 | is('String', new String('test')); // true
|
48 | 48 |
|
49 |
| -В примере выше `Object.prototype.toString` вызывается со значением [this](#function.this), являющимся объектом, значение `[[Class]]` которого нужно получить. |
| 49 | +В примере выше `Object.prototype.toString` вызывается со значением [this](#function.this), ссылающимся на объект, значение `[[Class]]` которого нужно получить. |
50 | 50 |
|
51 |
| -> **ES5 Замечание:** Для удобства в ECMAScript 5 возвращаемое значение `Object.prototype.toString `для `null` и `undefined` было изменено с `Object` на `Null` и `Undefined` соответственно. |
| 51 | +> **ES5 Замечание:** Для удобства, в ECMAScript 5 возвращаемое значение `Object.prototype.toString` для `null` и `undefined` было изменено с `Object` на `Null` и `Undefined` соответственно. |
52 | 52 |
|
53 | 53 | ### Проверка переменных на определённость
|
54 | 54 |
|
55 | 55 | typeof foo !== 'undefined'
|
56 | 56 |
|
57 |
| -Выше проверяется, было ли `foo` действительно объявлено или нет; просто обращение к переменной приведёт к `ReferenceError`. Это единственное, чем на самом деле полезен `typeof`. |
| 57 | +Выше проверяется, было ли `foo` действительно объявлено или нет; обычное обращение к несуществующей переменной приведёт к `ReferenceError`. И это единственное, чем на самом деле полезен `typeof`. |
58 | 58 |
|
59 | 59 | ### Заключение
|
60 | 60 |
|
61 |
| -Для проверки типа объекта настоятельно рекомендуется использовать` Object.prototype.toString` — это единственный надежный способ. Как показано выше в таблице типов, некоторые возвращаемые `typeof` значения не определены в спецификации: таким образом, они могут отличаться в различных реализациях. |
| 61 | +Для проверки типа объекта настоятельно рекомендуется использовать `Object.prototype.toString` — это единственный надежный способ для этих действий. Как показано выше в таблице типов, некоторые значения, возвращаемые `typeof`, не описаны в спецификации: таким образом, они могут отличаться в различных реализациях. |
62 | 62 |
|
63 |
| -Кроме случая проверки, была ли определена переменная, `typeof` следует избегать **во что бы то ни стало**. |
| 63 | +Кроме случая проверки, была ли определена переменная, `typeof` следует избегать. |
64 | 64 |
|
0 commit comments