2017-02-05 2 views
1

У меня есть следующий код теста:Как можно иметь массив с длиной 0, но имеющий контент?

console.log('AA',slider); 
console.log('AB',slider.length); 

он возвращает следующее хромированной консоли.

AA Array[53] 
AB 0 

я добавил тестовый код, потому что slider[5] всегда возвращался с undefined, даже если консоль показывает, что это значение есть.

вот упрощенная версия скрипта инициализации. весь код довольно длинный, а слайдер - это объект. Код для объекта работает, тестовый скрипт позже пытается манипулировать определенными положениями ползунка на основе данных возврата ajax.

var slider=[]; 
for (var uid=1;uid<50;uid++) { 
    slider[uid]=new Slider(.........); 
} 

var slider={}; 
for (var uid=1;uid<50;uid++) { 
    slider[uid]=new Slider(.........); 
} 

возвращает AA { 1: {м а: ...., б: ...., C: ...., г:. ... часов: .... }, 2: .....

получает все, вплоть до 49

+4

Не могли бы вы вывести код, который инициализирует 'слайдер'? Спасибо – Christos

+0

'на основе данных возврата ajax' - так же, как я думал ... асинхронный код ... измените ваш' console.log ('AA', слайдер), 'to' console.log ('AA', slider.slice()); '- и вы увидите, что он пуст ... ваша проблема, скорее всего, будет зная, как использовать результаты асинхронного вызова - см. https://stackoverflow.com/questions/14220321/how-do-return -a-response-from-a-асинхронный вызов –

+1

Невозможно воспроизвести https://jsfiddle.net/b3pgam6d/. – guest271314

ответ

0

Хорошо, я понял проблему и, надеюсь, это помогает другим.

После прохождения коды здесь гораздо лучше пример инициализации

var slider=[]; 
setInterval(function(){ 
    for (var uid=1;uid<50;uid++) { 
     slider[uid]=new Slider(.........); 
    } 
},500); 
console.log('AA',slider); 
console.log('AB',slider.length); 

массив действительно пуст в то время команда журнала консоль выполняется, но, видимо, первая строка записывает ссылку на объект и не Текущее состояние. Поэтому, когда я смотрю на журнал, который будет больше, чем через полсекунды, он будет показывать данные.

+0

Хотя это, вероятно, работает, похоже, что вы не идете по этому правильному пути. Вы получаете данные с ajax, который является асинхронным. Вы должны изучить использование обратных вызовов для решения этого или обещаний. http://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/ https://davidwalsh.name/promises –

+0

Я использую функции обратного вызова для обработки данных. Проблема заключалась в попытке устранить проблему, не связанную с вызовом Ajax. Поскольку в окне консоли отображается текущее значение объекта вместо значения во время выполнения команды, это привело к тому, что я увидел неожиданное значение. Значение объекта изменялось после того, как я пытался понять, что это за значение –

 Смежные вопросы

  • Нет связанных вопросов^_^