цикл for ( in ) в Javascript не соответствует ColdFusion

В ColdFusion я могу это сделать

<cfscript>
  favorites = [{"broker_label":"spectra"}]; 

  for (afav in favorites)   {
    writedump(afav);
  }
</cfscript>

И я получаю каждую строку в массиве.

Если я попробую это в Javascript

favorites = [{"broker_label":"spectra"}];   

for (var afav in favorites) {
  console.log(JSON.stringify(afav));
}

И все, что я получаю, это 0, или, если быть точным. "\"0\""

Что здесь происходит?


person James A Mohler    schedule 02.05.2019    source источник
comment
for ... in ... перебирает ключи ваших предметов. for ... of ... перебирает значения   -  person Get Off My Lawn    schedule 02.05.2019
comment
@GetOffMyLawn, это опечатка. Починил это   -  person James A Mohler    schedule 02.05.2019


Ответы (2)


Если вы хотите перебрать значения массива, вы можете использовать for…of или array.forEach()

favorites = [{"broker_label":"spectra"}]; 

for (let fav of favorites)   {
            console.log(JSON.stringify(fav));
}

// or:

favorites.forEach(elem => console.log(JSON.stringify(elem)))

for…in перебирает свойства, которые в случае массивов являются индексами. Обратите внимание, что использование for…in с массивами не рекомендуется, когда важен порядок:

Из https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in:

Примечание: for...in не следует использовать для перебора массива, где важен порядок индексов.

person Mark    schedule 02.05.2019

ColdFusion возвращает каждый элемент массива.

Javascript возвращает индекс элемента в массиве. Чтобы получить аналогичные результаты, мне пришлось

 for (var afav in favorites)    {
            console.log(JSON.stringify(favorites[afav]));
 }
person James A Mohler    schedule 02.05.2019