Skip to content

Commit 8d1b081

Browse files
committed
object/forinloop
1 parent fd11cbc commit 8d1b081

File tree

2 files changed

+15
-29
lines changed

2 files changed

+15
-29
lines changed

doc/ru/object/forinloop.md

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,37 @@
1-
## The `for in` Loop
1+
## Цикл `for in`
22

3-
Just like the `in` operator, the `for in` loop also traverses the prototype
4-
chain when iterating over the properties of an object.
3+
Как и оператор `in`, цикл `for in` проходит по всей цепочке прототипов обходя свойства объекта.
54

6-
> **Note:** The `for in` loop will **not** iterate over any properties that
7-
> have their `enumerable` attribute set to `false`; for example, the `length`
8-
> property of an array.
9-
10-
// Poisoning Object.prototype
5+
> **Примечание:** Цикл `for in` **не** обходит те свойства объекта, у которых атрибут `enumerable` установлен в `false`; как пример - свойство `length` у массивов
6+
7+
// Испортим Object.prototype
118
Object.prototype.bar = 1;
129

1310
var foo = {moo: 2};
1411
for(var i in foo) {
15-
console.log(i); // prints both bar and moo
12+
console.log(i); // печатает и bar и moo
1613
}
1714

18-
Since it is not possible to change the behavior of the `for in` loop itself, it
19-
is necessary to filter out the unwanted properties inside the loop body ,
20-
this is done by using the [`hasOwnProperty`](#object.hasownproperty) method of
21-
`Object.prototype`.
15+
Так как изменить поведение цикла `for in` как такового не представляется возможным, то для фильтрации нежелательных свойств объекта внутри этого цикла используют метод [`hasOwnProperty`](#object.hasownproperty) из `Object.prototype`.
2216

23-
> **Note:** Since the `for in` always traverses the complete prototype chain, it
24-
> will get slower with each additional layer of inheritance added to an object.
17+
> **Примечание:** Цикл `for in` всегда обходит всю цепочку прототипов полностью: таким образом, чем больше прототипов (слоёв наследования) в цепочке, тем медленнее работает цикл.
2518
26-
### Using `hasOwnProperty` for filtering
19+
### Использование `hasOwnProperty` в качестве фильтра
2720

28-
// still the foo from above
21+
// возьмём foo из примера выше
2922
for(var i in foo) {
3023
if (foo.hasOwnProperty(i)) {
3124
console.log(i);
3225
}
3326
}
3427

35-
This version is the only correct one to use. Due to the use of `hasOwnPropery` it
36-
will **only** print out `moo`. When `hasOwnProperty` is left out, the code is
37-
prone to errors in cases where the native prototypes - e.g. `Object.prototype` -
38-
have been extended.
28+
Эта единственная версия правильного использования. Благодаря использованию `hasOwnPropery` будет выведен **только** `moo`. Если же убрать `hasOwnProperty`, код становится нестабилен и могут возникнуть ошибки, если кто-то изменил встроенные прототипы, такие как `Object.prototype`.
3929

40-
One widely used framework which does this is [Prototype][1]. When this
41-
framework is included, `for in` loops that do not use `hasOwnProperty` are
42-
guaranteed to break.
30+
Один из самых популярных фреймворков [Prototype][1] как раз этим и славится, и если вы его подключаете, то не забудьте использовать `hasOwnProperty` внутри цикла `for in`, иначе гарантированно возникнут проблемы.
4331

44-
### Best practices
32+
### Рекомендации
4533

46-
It is recommended to **always** use `hasOwnProperty`. Never should any
47-
assumptions be made about the environment the code is running in, or whether the
48-
native prototypes have been extended or not.
34+
Рекомендация одна — **всегда** используйте `hasOwnProperty`. пишите код, который будет в наименьшей мере зависеть от окружения в котором он будет запущен — не стоит гадать, расширял кто-то прототипы или нет и используется ли в ней та или иная библиотека.
4935

5036
[1]: http://www.prototypejs.org/
5137

doc/ru/object/hasownproperty.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
Если вам необходимо проверить, определено ли свойство у *самого объекта*, а **не** в его [цепочке прототипов](#object.prototype), вы можете использовать метод `hasOwnProperty`, который все объекты наследуют от `Object.prototype`.
44

5-
> **Note:** Для проверки наличия свойства **недостаточно** проверять, эквивалентно ли оно `undefined`. Свойство может вполне себе существовать, но при этом ему может быть присвоено значение `undefined`.
5+
> **Примечание:** Для проверки наличия свойства **недостаточно** проверять, эквивалентно ли оно `undefined`. Свойство может вполне себе существовать, но при этом ему может быть присвоено значение `undefined`.
66
77
`hasOwnProperty` — единственная функция в JavaScript, которая позволяет получить свойства объекта **без обращения** к цепочке его прототипов.
88

0 commit comments

Comments
 (0)