|
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 |
| -> **Замечаение:** Хотя для вызова `typeof` также можно использовать синтаксис функции, т.е. `typeof(obj)`, на самом деле это не функция. Двойные круглые скобки будут работать нормально и возвращаемое значение будет использоваться как операнд оператора `typeof`. Но функции `typeof` — **не существует**. |
| 7 | +> **Замечаение:** Хотя для вызова `typeof` также можно использовать синтаксис функции, т.е. `typeof(obj)`, на самом деле это вовсе не функция. Да — двойные круглые скобки будут работать нормально и возвращаемое значение будет использоваться как операнд оператора `typeof`, но функции `typeof` — **не существует**. |
8 | 8 |
|
9 | 9 | ### Таблица типов JavaScript
|
10 | 10 |
|
|
26 | 26 | {} Object object
|
27 | 27 | new Object() Object object
|
28 | 28 |
|
29 |
| -В таблице выше, в колонке *Тип* приводится значение, возвращаемое оператором `typeof` для указанного объекта. Как хорошо заметно, это значение может быть чем угодно, но не ожидаемым результатом. |
| 29 | +В этой таблице в колонке *Тип* приводится значение, возвращаемое оператором `typeof` для указанного объекта. Как хорошо заметно, это значение может оказаться чем угодно, но не ожидавшимся результатом. |
30 | 30 |
|
31 | 31 | В колонке *Класс* приведено значение внутреннего свойства объекта `[[Class]]`.
|
32 | 32 |
|
|
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 | 63 | Кроме случая проверки, была ли определена переменная, `typeof` следует избегать.
|
64 | 64 |
|
0 commit comments