#javascript
#javascript
Вопрос:
Я пытаюсь отладить несовместимость JS с IE11:
Объект не поддерживает свойство или метод ‘includes’
Я читал, что это includes
можно легко заменить на indexof
. Однако, поскольку у меня очень ограниченные знания JS, я не уверен, что это единственное изменение, которое мне нужно здесь внести… Или другие части тоже потребуют перезаписи?
Оригинал
if (el.method_title.includes('|')){
el.timeslot = el.method_title.split('|')[1].trim();
el.method_title = el.method_title.split('|')[0].trim();
}
Предложение
if (el.method_title.indexOf('|')){
Комментарии:
1.
includes()
возвращает логическое значение,indexOf()
возвращает число. Вам нужно изменить функцию if, чтобы отразить это:if (el.method_title.indexof('|') > -1)
2.
.trim
также может потребоваться перезапись, когда.includes
не поддерживается ни в одной из ваших целевых сред3. Я только что реализовал решение от @Strelok, и это именно та ошибка, которую я не получил. Изучаю это сейчас.
4. Возможно, вы захотите установить полизаполнение вместо того, чтобы переписывать весь свой код.
Ответ №1:
Вызывается метод, indexOf
который вернет -1
, если подстрока не найдена в вашей строке, поэтому вам следует выполнить сравнение:
if (el.method_title.indexOf('|') >= 0)
indexOf()
Метод возвращает позицию первого вхождения указанного значения в строке.
Этот метод возвращает, -1
если значение для поиска никогда не встречается.
Примечание: Метод indexOf () чувствителен к регистру.
Комментарии:
1. Все в JavaScript чувствительно к регистру 🙂
Ответ №2:
Я бы рекомендовал вообще не тестировать строку с помощью includes
/ indexOf
— просто split
ее и проверить результат:
var parts = el.method_title.split('|'); // might want to pass a limit as well
if (parts.length > 1) {
el.timeslot = parts[1].trim();
el.method_title = parts[0].trim();
}
Проще и эффективнее.