Ten kod nie działa w przeglądarce Internet Explorer. Jakaś alternatywa?
"abcde".includes("cd")
Ten kod nie działa w przeglądarce Internet Explorer. Jakaś alternatywa?
"abcde".includes("cd")
Odpowiedzi:
String.prototype.includes jak piszesz, nie jest obsługiwany w przeglądarce Internet Explorer (ani Opera).
Zamiast tego możesz użyć String.prototype.indexOf. #indexOfzwraca indeks pierwszego znaku podciągu, jeśli znajduje się on w ciągu, w przeciwnym razie zwraca -1. (Podobnie jak odpowiednik Array)
var myString = 'this is my string';
myString.indexOf('string');
// -> 11
myString.indexOf('hello');
// -> -1
MDN ma wypełnienie do includesużycia indexOf: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill
EDYCJA: Opera obsługuje includesod wersji 28 .
EDYCJA 2: Obecne wersje Edge obsługują tę metodę. (stan na 2019)
Boolean, możemy(myString.indexOf('string') > -1) // to get a boolean true or false
Lub po prostu umieść to w pliku Javascript i życzę miłego dnia :)
String.prototype.includes = function (str) {
var returnValue = false;
if (this.indexOf(str) !== -1) {
returnValue = true;
}
return returnValue;
}
for...in, będzie iterował, String.prototype.includesjeśli jest zdefiniowany w ten sposób.
return this.indexOf(str) !== -1;
include () nie jest obsługiwana przez większość przeglądarek. Masz opcje do użycia
-polyfill z MDN https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes
lub do użycia
-indeks()
var str = "abcde";
var n = str.indexOf("cd");
Co daje n = 2
Jest to szeroko obsługiwane.
for...in! , będzie iterować, String.prototype.includesjeśli zdefiniujesz to w ten sposób.
Problem:
Spróbuj uruchomić poniżej (bez rozwiązania) z Internet Explorera i zobacz wynik.
console.log("abcde".includes("cd"));
Rozwiązanie:
Teraz uruchom poniższe rozwiązanie i sprawdź wynik
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"));
Miałem ten sam problem podczas pracy w Angular 5. Aby działał bezpośrednio bez samodzielnego pisania polyfillu, wystarczy dodać następującą linię do pliku polyfills.ts:
import "core-js/es7/array"
tsconfig.jsonIstotna może być również sekcja lib:
"lib": [
"es2017",
"dom"
],
Aby zareagować:
import 'react-app-polyfill/ie11';
import 'core-js/es5';
import 'core-js/es6';
import 'core-js/es7';
Rozwiązywanie problemów dla - obejmuje (), znajdź () i tak dalej.
Jeśli chcesz nadal używać Array.prototype.include()w javascript, możesz użyć tego skryptu:
github-script-ie-include
Ten automatycznie konwertuje funkcję include () na funkcję match (), jeśli wykryje IE.
Inną opcją jest zawsze użyciestring.match(Regex(expression))
Mi to pasuje:
function stringIncludes(a, b) {
return a.indexOf(b) !== -1;
}
Możesz zrobić to samo z !! i ~ operatorzy
var myString = 'this is my string';
!!~myString.indexOf('string');
// -> true
!!~myString.indexOf('hello');
// -> false
oto wyjaśnienie dwóch operatorów (!! i ~)
Co to jest !! (nie) operator w JavaScript?
https://www.joezimjs.com/javascript/great-mystery-of-the-tilde/