Este código não funciona no Internet Explorer. Alguma alternativa?
"abcde".includes("cd")
Este código não funciona no Internet Explorer. Alguma alternativa?
"abcde".includes("cd")
Respostas:
String.prototype.includes enquanto você escreve, não é compatível com o Internet Explorer (ou Opera).
Em vez disso, você pode usar String.prototype.indexOf. #indexOfretorna o índice do primeiro caractere da substring se estiver na string; caso contrário, retorna -1. (Muito parecido com o equivalente de Array)
var myString = 'this is my string';
myString.indexOf('string');
// -> 11
myString.indexOf('hello');
// -> -1
MDN tem um polyfill para includesusar indexOf: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill
EDIT: Opera suporta a includespartir da versão 28 .
EDIT 2: As versões atuais do Edge suportam o método. (a partir de 2019)
Boolean, podemos(myString.indexOf('string') > -1) // to get a boolean true or false
Ou apenas coloque isso em um arquivo Javascript e tenha um bom dia :)
String.prototype.includes = function (str) {
var returnValue = false;
if (this.indexOf(str) !== -1) {
returnValue = true;
}
return returnValue;
}
for...in, ela irá iterar String.prototype.includesse for definida assim.
return this.indexOf(str) !== -1;
includes () não é compatível com a maioria dos navegadores. Suas opções são usar
-polyfill do MDN https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes
ou para usar
-índice de()
var str = "abcde";
var n = str.indexOf("cd");
O que dá a você n = 2
Isso é amplamente suportado.
for...in! , ele irá iterar String.prototype.includesse você definir assim.
Problema:
Experimente executar abaixo (sem solução) no Internet Explorer e veja o resultado.
console.log("abcde".includes("cd"));
Solução:
Agora execute a solução abaixo e verifique o resultado
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"));
Eu tive o mesmo problema ao trabalhar no Angular 5. Para fazê-lo funcionar diretamente sem escrever um polyfill você mesmo, basta adicionar a seguinte linha ao arquivo polyfills.ts:
import "core-js/es7/array"
Além disso, a tsconfig.jsonseção lib pode ser relevante:
"lib": [
"es2017",
"dom"
],
Para reagir:
import 'react-app-polyfill/ie11';
import 'core-js/es5';
import 'core-js/es6';
import 'core-js/es7';
Resolução de problemas para - inclui (), localizar () e assim por diante ..
Se você quiser continuar usando o Array.prototype.include()em javascript, você pode usar este script:
github-script-ie-include
Isso converte automaticamente a função include () em match () se detectar o IE.
Outra opção é usar sempre ostring.match(Regex(expression))
Funciona para mim:
function stringIncludes(a, b) {
return a.indexOf(b) !== -1;
}
Você pode fazer o mesmo com !! e ~ operadores
var myString = 'this is my string';
!!~myString.indexOf('string');
// -> true
!!~myString.indexOf('hello');
// -> false
aqui está a explicação dos dois operadores (!! e ~)
O que é !! (não) operador em JavaScript?
https://www.joezimjs.com/javascript/great-mystery-of-the-tilde/