-
Notifications
You must be signed in to change notification settings - Fork 557
Updates from the Russian translation #369
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
5fc07de
585324f
151e969
47c4ce4
eabb909
95bcf38
391df07
3798cbb
bf0255a
a29e886
12e34fc
a8f40a0
e0dce22
9bc24e5
3ab5688
fca3cb6
eb05618
6a06c15
99e233e
d57e781
0b58b92
97edd93
4043958
2fe7e5d
cca783b
58b12b2
c4d6ae9
71efc60
57a8f74
9a3a1a3
812a040
2b1e3ff
d5fb8dc
0cb9332
b874527
74c20e7
9e85ab4
94f0428
1188f3e
fdc3413
0367e07
830a92c
911cc09
34837a0
6998749
a72d825
f0958f0
62d8d0b
3e458ab
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,66 +1,56 @@ | ||
## Оператор `delete` | ||
|
||
Если говорить коротко, то JavaScript *невозможно* удалить глобальную переменную, функцию или любой другой объект, которому задан атрибут `DontDelete` . | ||
Если говорить кратко — в JavaScript невозможно удалить глобальную переменную или функцию или любую другую сущность, у которой установлен атрибут `DontDelete`. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Я бы оставил запятую между "переменную" и "функцию". |
||
|
||
### Глобальный код и код функции | ||
### Глобальный код и код внутри функций | ||
|
||
Если переменная или функция определена в глобальной области видимости (scope) или в | ||
[области видимости функции](#function.scopes), это значит что она является | ||
свойством (property) глобального или же Activation объекта. | ||
Подобные свойства имеют набор атрибутов, одним из которых и является | ||
упомянутый ранее `DontDelete`. Объявление переменных и функций в коде | ||
функции или глобально всегда создает свойство с атрибутом `DontDelete`, и поэтому | ||
не может быть удалено. | ||
Когда переменная или функция определена в глобальной области видимости или в [области видимости функции](#function.scopes), её судьба предопределена: (_прим. перев._ — внутри движка JavaScript) она является свойством (`property`) либо объекта `Activation`, либо объекта `Global`. Подобные сущности имеют набор внутренних атрибутов, одним из которых и является упомянутый ранее `DontDelete`. Переменные и объявления функций, замеченные движком в глобальной области или в коде функций, создаются с атрибутом `DontDelete` и поэтому не могут быть удалены. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. "её судьба предопределена: (прим. перев. — внутри движка JavaScript)" — по моему, это лишнее. "замеченные движком в ..." — звучит странно. Движок скорее "интерпретирует", а не "замечает" что либо. Предлагаю убрать слово "движок" и сформулировал как-то так: "Для переменных и функций, объявленных в глобальной области видимости или внутри других функций, всегда создается атрибут |
||
|
||
// глобальная переменная: | ||
var a = 1; // задается DontDelete | ||
var a = 1; // установлен DontDelete | ||
delete a; // false | ||
a; // 1 | ||
|
||
// обычная функция: | ||
function f() {} // задается DontDelete | ||
function f() {} // установлен DontDelete | ||
delete f; // false | ||
typeof f; // "function" | ||
|
||
// переназначение не поможет: | ||
// переопределение не помогает: | ||
f = 1; | ||
delete f; // false | ||
f; // 1 | ||
|
||
### Явные свойства | ||
### Установленные пользователем свойства | ||
|
||
Явно заданные свойство могут быть удалены обычным способом. | ||
Свойства, установленные явно, могут быть безпрепятственно удалены: | ||
|
||
// явно заданные свойства: | ||
// явно установим свойства: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. - явно установим свойства
+ явно установленные свойства |
||
var obj = {x: 1}; | ||
obj.y = 2; | ||
delete obj.x; // true | ||
delete obj.y; // true | ||
obj.x; // undefined | ||
obj.y; // undefined | ||
|
||
В примере выше, `obj.x` и `obj.y` могут быть удалены потому что у них не задан | ||
атрибут `DontDelete`. Именно поэтому следующий пример тоже сработает. | ||
В приведённом примере свойства `obj.x` и `obj.y` могут быть удалены, поскольку у них отсутствует атрибут `DontDelete`. По этой же причине работает и пример ниже: | ||
|
||
// работает хорошо везде, кроме IE: | ||
// работает нормально, но не в IE | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Тут стоит либо вообще убрать этот комментарий, либо пояснить, почему в IE это работает "не нормально" и в каких версиях. В любом случае, можно обойтись без эпитетов. |
||
var GLOBAL_OBJECT = this; | ||
GLOBAL_OBJECT.a = 1; | ||
a === GLOBAL_OBJECT.a; // true - просто глобальная переменная | ||
delete GLOBAL_OBJECT.a; // true | ||
GLOBAL_OBJECT.a; // undefined | ||
|
||
Здесь мы используем небольшой трюк, чтобы удалить `a`. [`this`](#function.this) здесь | ||
относится к глобальному объекту и мы явно указали удаление переменной `a` как свойства | ||
глобального объекта, что и позволи нам ее удалить. | ||
Здесь, чтобы удалить `a`, мы используем один трюк. В этом коде [`this`](#function.this) ссылается на объект `Global` и мы явно описываем переменную `a` под видом его свойства, что и позволяет нам её успешно удалить. | ||
|
||
Из-за нескольких багов в IE (как минимум 6-8) предыдущий код работать в нем не будет. | ||
Internet Explorer (по крайней мере, с 6-го по 8-й) содержит баги, из-за которых такой код не сработает. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. "с 6-ю по 8-ю версию" |
||
|
||
### Аргументы функций и встроенные модули (built-ins) | ||
### Аргументы функций и встроенные свойства | ||
|
||
Обычным аргументам функций [`arguments` objects](#function.arguments) и | ||
встроенным свойствам также задан атрибут `DontDelete`. | ||
Обычные аргументы функций, [объект `arguments`](#function.arguments), а также встроенные свойства, объединены общей особенностью: у всех у них установен атрибут `DontDelete`. | ||
|
||
// аргументы функции и свойства: | ||
// аргументы функций и свойства: | ||
(function (x) { | ||
|
||
delete arguments; // false | ||
|
@@ -75,14 +65,12 @@ | |
|
||
})(1); | ||
|
||
### Host объекты | ||
### Хост-объекты | ||
|
||
Host объект - это объект, предоставляемый окружением. К таким объектам относятся `window`, | ||
`document`, `location` и так далее. | ||
Для host объектов поведение оператора `delete` может быть непредсказуемым. | ||
Согласно спецификации, таким объектам позволено реализовывать любой вид поведения. | ||
(_прим. перев._ — Хост-объекты — это объекты, которые, в неком окружении, дополняют функциональность языка JavaScript, не являясь частью его спецификации. В случае браузера это объекты `window`, `document`, `setTimeout` и т.п.) | ||
|
||
Поведение оператора `delete` может быть полностью непредсказуемым, когда вы примененяете его к таким хост-объектам. С позволения спецификации, хост-объекты вольны вести себя как им только вздумается. | ||
|
||
### Заключение | ||
|
||
Оператор `delete` часто обладает непредсказуемым поведением и безопасно использовать | ||
его можно лишь для удаления явно заданных свойств обычных объектов. | ||
Оператор `delete` часто ведёт себя непредсказуемо и может использоваться относительно безопасно только для удаления пользовательских свойств у обычных объектов. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Усложнил. Давай попробуем перефразировать.