Этот код не работает в Internet Explorer. Любая альтернатива?
"abcde".includes("cd")
Этот код не работает в Internet Explorer. Любая альтернатива?
"abcde".includes("cd")
String.prototype.includes
, как вы пишете, не поддерживается в Internet Explorer (или Opera).
Вместо этого вы можете использовать String.prototype.indexOf
. #indexOf
возвращает индекс первого символа подстроки, если он находится в строке, в противном случае он возвращает -1
. (Очень похоже на эквивалент массива)
var myString = 'this is my string';
myString.indexOf('string');
// -> 11
myString.indexOf('hello');
// -> -1
У MDN есть полизаполнение для includes
с использованием indexOf
: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill
ОБНОВЛЕНИЕ: Opera поддерживает includes
начиная с версии 28.
ОБНОВЛЕНИЕ 2: текущие версии Edge поддерживает метод. (по состоянию на 2019 г.)
Или просто поместите это в файл Javascript и получите хороший день:)
String.prototype.includes = function (str) {
var returnValue = false;
if (this.indexOf(str) !== -1) {
returnValue = true;
}
return returnValue;
}
includes() не поддерживается большинством браузеров. Вы можете использовать
- polyfill из MDN https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes
или использовать
-indexof()
var str = "abcde";
var n = str.indexOf("cd");
Что дает вам n = 2
Это широко поддерживается.
Этот может быть лучше и короче:
function stringIncludes(a, b) {
return a.indexOf(b) >= 0;
}
Проблема:
Попробуйте запустить ниже (без решения) из Internet Explorer и посмотрите результат.
console.log("abcde".includes("cd"));
У меня была такая же проблема при работе в Angular 5. Чтобы заставить его работать напрямую без написания polyfill самостоятельно, просто добавьте следующую строку в файл polyfills.ts:
import "core-js/es7/array"
Также может быть tsconfig.json
раздел lib tsconfig.json
:
"lib": [
"es2017",
"dom"
],
Для реакции:
import 'react-app-polyfill/ie11';
import 'core-js/es5';
import 'core-js/es6';
import 'core-js/es7';
Решение проблемы для - includes(), find() и т.д.
Если вы хотите продолжать использовать Array.prototype.include()
в javascript, вы можете использовать этот скрипт: github-script-ie-include, который автоматически преобразует функцию include() в функцию match(), если обнаруживает IE.
Другой вариант - всегда использовать string.match(Regex(expression))
Вы можете сделать то же самое с !! и ~ операторы
var myString = 'this is my string';
!!~myString.indexOf('string');
// -> true
!!~myString.indexOf('hello');
// -> false
здесь объяснение двух операторов (!! и ~)
Что !! (не нет) оператор в JavaScript?
https://www.joezimjs.com/javascript/great-mystery-of-the-tilde/
Это работает для меня:
function stringIncludes(a, b) {
return a.indexOf(b) !== -1;
}