Jump to content
  • 0

for/in


Bumblebee
 Share

Question

Есть неясность, прошу помощи.

Вот код:

var o = {x:1, y:2, z:3};

for (var i in o) console.log(i);

На выходе:

x

y

z

Как работает? (Как я понял)

Строка 1. Объявление объекта "o".

Строка 2. Сначала идет проверка, является ли "o" объектом. В моем случае да, является. И имеет три свойства: x, y, z. Потом идет инициализация переменной i. Успешно. После этого начинается цикл for/in. Каждый раз переменной "i" присваивается очередное свойство объекта "o". Причем, как я понял, не его значение, а его имя, в противном случае консоль выдала бы это:

1

2

3

Теперь, если немного изменить код:

var o = {x:1, y:2, z:3};

for (var i in o) console.log(o);

, то получается такой результат:

1

2

3

Но если вместо console.log(o) написать console.log(o.i), то отладчик выдает ошибку undefined трижды.

Вопрос :)

В чем косяк? Ведь я прошу его вывести в консоль значения трех свойств объекта "o"

Если просто объявить объект, а потом написать в консоли o.x например, то она выведет 1.

Edited by Bumblebee
Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0

o.i в Javascript понимается как o['i']

Строка 2. Сначала идет проверка, является ли "o" объектом.
Не совсем, попробуйте инициализировать o иначе. Например:

var o;

или

var o = "xyz";

Edited by freeneutron
Link to comment
Share on other sites

  • 0

Если я просто объявлю объект:

var o = {x:1, y:2, z:3};

А потом захочу увидеть значение свойства "y", например, то наберу следующую инструкцию:

console.log(o.y)

И он выведет в консоль нужное мне значение.

Почему в теле цикла for/in эта инструкция не работает, мне не понятно..

Link to comment
Share on other sites

  • 0

Если я просто объявлю объект:

var o = {x:1, y:2, z:3};

А потом захочу увидеть значение свойства "y", например, то наберу следующую инструкцию:

console.log(o.y)

И он выведет в консоль нужное мне значение.

Почему в теле цикла for/in эта инструкция не работает, мне не понятно..

работает.

просто вы пытаетесь обращаться к o.i а свойства i у объекта нет )) Потому что ищется именно свойство с именем i, а не с именем как у значения i.

В вашем случае верным будет как раз таки обращатmся к свойствам как к элеменам массива o .

Edited by wwt
Link to comment
Share on other sites

  • 0

В вашем случае верным будет как раз таки обращатmся к свойствам как к элеменам массива o. .

o, без точки

а ну да, опечатался.поправил.

Edited by wwt
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy