Этот код не работает в Internet Explorer. Любая альтернатива?
"abcde".includes("cd")
Этот код не работает в Internet Explorer. Любая альтернатива?
"abcde".includes("cd")
Ответы:
String.prototype.includes , как вы пишете, не поддерживается в Internet Explorer (или Opera).
Вместо этого вы можете использовать String.prototype.indexOf. #indexOfвозвращает индекс первого символа подстроки, если он находится в строке, в противном случае возвращает -1. (Во многом как эквивалент Array)
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 год)
Boolean, мы можем(myString.indexOf('string') > -1) // to get a boolean true or false
Или просто поместите это в файл Javascript и хорошего дня :)
String.prototype.includes = function (str) {
var returnValue = false;
if (this.indexOf(str) !== -1) {
returnValue = true;
}
return returnValue;
}
for...in, он будет повторяться, String.prototype.includesесли он определен таким образом.
return this.indexOf(str) !== -1;
include () не поддерживается большинством браузеров. Ваши варианты - использовать
-polyfill из MDN https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes
или использовать
-индекс()
var str = "abcde";
var n = str.indexOf("cd");
Что дает вам n = 2
Это широко поддерживается.
for...in! , он будет повторяться, String.prototype.includesесли вы определите его так.
Проблема:
Попробуйте запустить ниже (без решения) из Internet Explorer и посмотрите результат.
console.log("abcde".includes("cd"));
Решение:
Теперь запустите ниже решение и проверьте результат
if (!String.prototype.includes) {//To check browser supports or not
String.prototype.includes = function (str) {//If not supported, then define the method
return this.indexOf(str) !== -1;
}
}
console.log("abcde".includes("cd"));
У меня была такая же проблема при работе в Angular 5. Чтобы он работал напрямую, без написания полифилла самостоятельно, просто добавьте следующую строку в файл polyfills.ts:
import "core-js/es7/array"
Также tsconfig.jsonможет быть актуален раздел lib:
"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))
Меня устраивает:
function stringIncludes(a, b) {
return a.indexOf(b) !== -1;
}
Вы можете сделать то же самое с !! и ~ операторы
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/