Skip to content

Commit 546fb55

Browse files
committed
Merge pull request BonsaiDen#268 from AlexToDef/core_delete_operator_ru
ru/core/delete translation added
2 parents 7460719 + bc70cd3 commit 546fb55

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed

doc/ru/core/delete.md

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
## Оператор `delete`
2+
3+
Если говорить коротко, то JavaScript *невозможно* удалить глобальную переменную, функцию или любой другой объект, которому задан атрибут `DontDelete` .
4+
5+
### Глобальный код и код функции
6+
7+
Если переменная или функция определена в глобальной области видимости (scope) или в
8+
[области видимости функции](#function.scopes), это значит что она является
9+
свойством (property) глобального или же Activation объекта.
10+
Подобные свойства имеют набор атрибутов, одним из которых и является
11+
упомянутый ранее `DontDelete`. Объявление переменных и функций в коде
12+
функции или глобально всегда создает свойство с атрибутом `DontDelete`, и поэтому
13+
не может быть удалено.
14+
15+
// глобальная переменная:
16+
var a = 1; // задается DontDelete
17+
delete a; // false
18+
a; // 1
19+
20+
// обычная функция:
21+
function f() {} // задается DontDelete
22+
delete f; // false
23+
typeof f; // "function"
24+
25+
// переназначение не поможет:
26+
f = 1;
27+
delete f; // false
28+
f; // 1
29+
30+
### Явные свойства
31+
32+
Явно заданные свойство могут быть удалены обычным способом.
33+
34+
// явно заданные свойства:
35+
var obj = {x: 1};
36+
obj.y = 2;
37+
delete obj.x; // true
38+
delete obj.y; // true
39+
obj.x; // undefined
40+
obj.y; // undefined
41+
42+
В примере выше, `obj.x` и `obj.y` могут быть удалены потому что у них не задан
43+
атрибут `DontDelete`. Именно поэтому следующий пример тоже сработает.
44+
45+
// работает хорошо везде, кроме IE:
46+
var GLOBAL_OBJECT = this;
47+
GLOBAL_OBJECT.a = 1;
48+
a === GLOBAL_OBJECT.a; // true - просто глобальная переменная
49+
delete GLOBAL_OBJECT.a; // true
50+
GLOBAL_OBJECT.a; // undefined
51+
52+
Здесь мы используем небольшой трюк, чтобы удалить `a`. [`this`](#function.this) здесь
53+
относится к глобальному объекту и мы явно указали удаление переменной `a` как свойства
54+
глобального объекта, что и позволи нам ее удалить.
55+
56+
Из-за нескольких багов в IE (как минимум 6-8) предыдущий код работать в нем не будет.
57+
58+
### Аргументы функций и встроенные модули (built-ins)
59+
60+
Обычным аргументам функций [`arguments` objects](#function.arguments) и
61+
встроенным свойствам также задан атрибут `DontDelete`.
62+
63+
// аргументы функции и свойства:
64+
(function (x) {
65+
66+
delete arguments; // false
67+
typeof arguments; // "object"
68+
69+
delete x; // false
70+
x; // 1
71+
72+
function f(){}
73+
delete f.length; // false
74+
typeof f.length; // "number"
75+
76+
})(1);
77+
78+
### Host объекты
79+
80+
Host объект - это объект, предоставляемый окружением. К таким объектам относятся `window`,
81+
`document`, `location` и так далее.
82+
Для host объектов поведение оператора `delete` может быть непредсказуемым.
83+
Согласно спецификации, таким объектам позволено реализовывать любой вид поведения.
84+
85+
### Заключение
86+
87+
Оператор `delete` часто обладает непредсказуемым поведением и безопасно использовать
88+
его можно лишь для удаления явно заданных свойств обычных объектов.

0 commit comments

Comments
 (0)