|
9 | 9 | Foo.bar = 1;
|
10 | 10 | Foo.bar; // 1
|
11 | 11 |
|
12 |
| -Неверно считать, что числовые литералы нельзя использовать в роли объектов — это распространённое заблуждение. Его причиной является упущение в парсере JavaScript, благодаря которому применение *точечной нотации* к числу воспринимается им как литерал числа с плавающей точкой. |
| 12 | +Распростанено заблуждение, что числовые литералы нельзя использовать в роли объектов — оно неверно и зародилось из-за упущения в парсере JavaScript, благодаря которому применение *точечной нотации* к числу воспринимается им как литерал числа с плавающей точкой. |
13 | 13 |
|
14 | 14 | 2.toString(); // вызывает SyntaxError
|
15 | 15 |
|
16 |
| -Есть несколько способов обойти этот недостаток и любой из них можно использовать для того, чтобы работать с числами, как с объектами: |
| 16 | +Есть несколько способов обойти этот недостаток и любой из них подойдёт, если нужно добиться от числа поведения объекта: |
17 | 17 |
|
18 | 18 | 2..toString(); // вторая точка распознаётся корректно
|
19 | 19 | 2 .toString(); // обратите внимание на пробел перед точкой
|
20 | 20 | (2).toString(); // двойка вычисляется заранее
|
21 | 21 |
|
22 |
| -### Объекты как тип данных |
| 22 | +### Объекты как хранилища данных |
23 | 23 |
|
24 |
| -Объекты в JavaScript могут использоваться как [*хеш-таблицы*][1]: подавляющей частью состоят из именованных свойств (ключей), привязанных к значениям. |
| 24 | +Объекты в JavaScript могут использоваться и как [*хеш-таблицы*][1]: подавляющей частью они состоят из именованных свойств (ключей), привязанных к значениям. |
25 | 25 |
|
26 | 26 | Используя объектный литерал — нотацию `{}` — можно создать простой объект. Новый объект [наследуется](#object.prototype) от `Object.prototype` и не имеет [собственных свойств](#object.hasownproperty).
|
27 | 27 |
|
|
34 | 34 |
|
35 | 35 | Получить доступ к свойствам объекта можно двумя способами: используя либо точечную нотацию, либо запись квадратными скобками.
|
36 | 36 |
|
37 |
| - var foo = {name: 'Kitten'} |
| 37 | + var foo = {name: 'kitten'} |
38 | 38 | foo.name; // kitten
|
39 | 39 | foo['name']; // kitten
|
40 | 40 |
|
|
44 | 44 | foo.1234; // SyntaxError
|
45 | 45 | foo['1234']; // работает
|
46 | 46 |
|
47 |
| -Обе нотации идентичны по принципу работы — одна лишь разница в том, что использование квадратных скобок позволяет устанавливать свойства динамически и использовать такие имена свойств, какие в других случаях могли бы привести к синтаксической ошибке. |
| 47 | +Обе нотации идентичны по принципу работы, одна лишь разница в том, что использование квадратных скобок позволяет устанавливать свойства динамически и использовать такие имена свойств, какие в других случаях могли бы привести к синтаксической ошибке. |
48 | 48 |
|
49 | 49 | ### Удаление свойств
|
50 | 50 |
|
51 |
| -Единственный способ удалить свойство у объекта — использовать оператор `delete`; устанавливая свойство в `undefined` или `null`, вы только заменяете связанное с ним *значение*, но не удаляете *ключ*. |
| 51 | +Единственный способ полностью удалить свойство у объекта — использовать оператор `delete`; устанавливая свойство в `undefined` или `null`, вы только заменяете связанное с ним *значение*, но не удаляете *ключ*. |
52 | 52 |
|
53 | 53 | > **Замечание** от перев.: Если ссылок на значение больше нет, то сборщиком мусора удаляется и само значение, но ключ объекта при этом всё так же имеет новое значение.
|
54 | 54 |
|
|
73 | 73 |
|
74 | 74 | var test = {
|
75 | 75 | 'case': 'Я — ключевое слово, поэтому меня надо записывать строкой',
|
76 |
| - delete: 'Я тоже ключевое слово, так что я' // бросаю SyntaxError |
| 76 | + delete: 'Я тоже ключевое слово, и меня' // порождает SyntaxError |
77 | 77 | };
|
78 | 78 |
|
79 |
| -Свойства объектов могут записываться как явно символами, так и в виде закавыченных строк. В связи с другим упущением в парсере JavaScript, этот код выбросит `SyntaxError` во всех версиях ранее ECMAScript 5. |
| 79 | +Ключи свойств объектов могут записываться как явно символами без кавычек, так и в виде закавыченных строк. В связи с другим упущением в парсере JavaScript, вышеприведённый код выбросит `SyntaxError` во всех версиях ранее ECMAScript 5. |
80 | 80 |
|
81 |
| -Источником ошибки является факт, что `delete` — это *ключевое слово* и поэтому его необходимо записывать как *строчный литерал*: ради уверенности в том, что оно будет корректно опознано более старыми движками JavaScript. |
| 81 | +Источником ошибки является факт, что `delete` — это *ключевое слово* и поэтому его *необходимо* записывать как *строчный литерал*, ради уверенности в том, что оно будет корректно опознано более старыми движками JavaScript. |
82 | 82 |
|
83 | 83 | *От перев.:* И еще один пример в пользу строковой нотации, это относится к [JSON][2]:
|
84 | 84 |
|
|
0 commit comments