SCRIPT1004: ожидается ';' происходит в браузере IE цикла "For" - PullRequest
0 голосов
/ 06 марта 2019

Я получаю эту ошибку SCRIPT1004: Expected ';' внутри двух циклов «For», начиная с части «of» в Internet Explorer.Есть ли способ решить эту проблему?

for(item of workstationData.coPathColumns) {
    var builtId = '#icat-' + item;
    if(!!$(builtId)[0].innerText) {
        $(builtId)[0].parentNode.hidden = false;
    }
}

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Internet Explorer не поддерживает цикл for ... of.

Как видно здесь: Документация MDN

Кроме того, я рекомендую вам проверить, поддерживает ли функция или набор функций браузер, который вы должны поддерживать, в этом случае Internet Explorer, проверьте caniuse.com

Ваш код:

for(item of workstationData.coPathColumns) {
    var builtId = '#icat-' + item;
    if(!!$(builtId)[0].innerText) {
        $(builtId)[0].parentNode.hidden = false;
    }
}

можно преобразовать в традиционный цикл for:

for(var i = 0; i < workstationData.coPathColumns; i++) {
    var builtId = '#icat-' + workstationData.coPathColumns[i];
    if(!!$(builtId)[0].innerText) {
        $(builtId)[0].parentNode.hidden = false;
    }
}

В качестве альтернативы, это хорошо, если вы автоматизируете этот процесс "транспилирования". Поэтому внимательно посмотрите на babel. Вставка вашего кода в babeljs.org

Создает следующий вывод - который должен быть эквивалентен вашей петле for...of, преобразованной в es2015-loose стандарт:

"use strict";

for (var _iterator = workstationData.coPathColumns, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
  if (_isArray) {
    if (_i >= _iterator.length) break;
    item = _iterator[_i++];
  } else {
    _i = _iterator.next();
    if (_i.done) break;
    item = _i.value;
  }

  var builtId = '#icat-' + item;

  if (!!$(builtId)[0].innerText) {
    $(builtId)[0].parentNode.hidden = false;
  }
}
0 голосов
/ 06 марта 2019

Как прокомментировал brk, IE не поддерживает of, смотрите здесь для получения подробной информации.

Вы можете использовать forEach или простой цикл for. Я предпочитаю простой цикл for по той причине, что он не основан на цикле callback (асинхронный), тогда как forEach принимает функцию callback.

for(let i =0; i< workstationData.coPathColumns.length; i++) {
    item = workstationData.coPathColumns[i]; //assuming item is defined before, otherwise use let item = ...
    var builtId = '#icat-' + item;
    if(!!$(builtId)[0].innerText) {
        $(builtId)[0].parentNode.hidden = false;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...