Объект внутри массива - работает в одной области, но не в другой? - PullRequest
0 голосов
/ 10 июня 2010

Хорошо, я изучил некоторые более продвинутые аспекты Javascript и теперь пытаюсь использовать это, я застрял.

Вот мой код:

function Data(){}

function init(state){
  var item;
  item=new Data();
  item.fieldrid=17;
  item.description='foo';
  state.push(item);
};


function findInState(state,fieldrid) {
    for (var item in state) {
        alert(item.fieldrid); //prints undefined
        if (item.fieldrid == fieldrid) {
            return item;
        }
    }
    return null;
}

var s=[];
init(s);
alert(s[0].fieldrid); //prints 17 (expected)
alert(findInState(s,17).fieldrid); //exception here. function returns null.

Рабочий пример: здесь, на jsbin

Почему это не работает? Я ожидал бы, что предупреждение в findInState даст 17, но вместо этого оно даст неопределенное значение.

Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 10 июня 2010
for (var item in state)

Вы не должны зацикливаться на массиве, используя for..in.
. Работает, как ожидается, при использовании for (var i = 0; i < state.length; i++).

См. https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Statements/for...in:

Хотя может быть заманчиво использовать это как способ перебора массива, это плохая идея.

0 голосов
/ 10 июня 2010

In

alert(item.fieldrid); //prints undefined

Вам необходимо получить доступ к состоянию массива [item], поэтому перед этой строкой следует добавить

item = state[item];

Я думаю, что я сделаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...