0
Not a bug

for in - баг или фича?

AlexDr 7 jaar geleden in iRidium Script bijgewerkt door Tatiana Kiselyova (expert) 7 jaar geleden 5

Доброго дня всем!


Есть такой код в серверном проекте:

   var Sensors = [  
{name:"LS1", fullName:HDL_mixContr+"Датчик_1"},
{name:"LS2", fullName:HDL_mixContr+"Датчик_2"}       
   ];
   for(ss in Sensors){  
      debug(ss);
      debug("Subscribe tag: "+ss.fullName);           
      IR.SubscribeTagChange(STHDL+ss.fullName); 
   }  


Объясните почему в консоли я вижу это:

0
Subscribe tag: undefined
1
Subscribe tag: undefined

Я ожидал увидеть там:

Object
Subscribe tag: Датчик _1
Object
Subscribe tag: Датчик _2


Waiting for user's reply

Здравствуйте.

Строка debug(ss); возвращает 0 и 1 потому что Вы перебираете массив - возвращается индекс элемента массива.

Используйте такую конструкцию для вывода значения свойства fullName:

debug("Subscribe tag: "+Sensors[ss].fullName);

почему возвращается индекс, а не сам элемент массива. вот что не понятно и не очевидно.

+1

Это особенность работы цикла for in, который, вообще-то не рекомендуется использовать для массивов. Если Вы хотите вывести элемент массива, то нужно использовать такую конструкцию:

debug(Sensors[ss]);

Понял. В JS своя особая интерпретация этого цикла. Цикл для перебора свойств, а не элементов.