Цей код не працює в 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
EDIT: Opera підтримує includesвід версії 28 .
EDIT 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
або використовувати
-indexof ()
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. Для того, щоб змусити її працювати безпосередньо, не записуючи polyfill самостійно, просто додайте наступний рядок у файл 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';
Вирішення проблеми - включає (), 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/