Este código no funciona en Internet Explorer. ¿Alguna alternativa?
"abcde".includes("cd")
Este código no funciona en Internet Explorer. ¿Alguna alternativa?
"abcde".includes("cd")
Respuestas:
String.prototype.includes
mientras escribe, no es compatible con Internet Explorer (u Opera).
En su lugar, puede utilizar String.prototype.indexOf
. #indexOf
devuelve el índice del primer carácter de la subcadena si está en la cadena; de lo contrario, devuelve -1
. (Muy parecido al equivalente de Array)
var myString = 'this is my string';
myString.indexOf('string');
// -> 11
myString.indexOf('hello');
// -> -1
MDN tiene un polyfill para includes
usar indexOf
: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill
EDITAR: Opera admite a includes
partir de la versión 28 .
EDITAR 2: las versiones actuales de Edge admiten el método. (a partir de 2019)
Boolean
, podemos(myString.indexOf('string') > -1) // to get a boolean true or false
O simplemente ponga esto en un archivo Javascript y tenga un buen día :)
String.prototype.includes = function (str) {
var returnValue = false;
if (this.indexOf(str) !== -1) {
returnValue = true;
}
return returnValue;
}
for...in
, iterará String.prototype.includes
si se define así.
return this.indexOf(str) !== -1;
incluye () no es compatible con la mayoría de los navegadores. Tus opciones son usar
-polyfill de MDN https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes
o para usar
-índice de()
var str = "abcde";
var n = str.indexOf("cd");
Lo que te da n = 2
Esto está ampliamente respaldado.
for...in
! , se repetirá String.prototype.includes
si lo define así.
Problema:
Intente ejecutar a continuación (sin solución) desde Internet Explorer y vea el resultado.
console.log("abcde".includes("cd"));
Solución:
Ahora ejecute la siguiente solución y verifique el 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"));
Tuve el mismo problema cuando trabajaba en Angular 5. Para que funcione directamente sin escribir un polyfill usted mismo, simplemente agregue la siguiente línea al archivo polyfills.ts:
import "core-js/es7/array"
Además, la tsconfig.json
sección lib puede ser relevante:
"lib": [
"es2017",
"dom"
],
Para reaccionar:
import 'react-app-polyfill/ie11';
import 'core-js/es5';
import 'core-js/es6';
import 'core-js/es7';
Resolución de problemas para: incluye (), buscar (), etc.
Si desea seguir usando Array.prototype.include()
en javascript, puede usar este script:
github-script-ie-include
Eso convierte automáticamente la función include () en la función match () si detecta IE.
Otra opción es usar siempre elstring.match(Regex(expression))
Esto funciona para mi:
function stringIncludes(a, b) {
return a.indexOf(b) !== -1;
}
Puedes hacer lo mismo con !! y ~ operadores
var myString = 'this is my string';
!!~myString.indexOf('string');
// -> true
!!~myString.indexOf('hello');
// -> false
aquí está la explicación de los dos operadores (!! y ~)
Cuál es el !! (no no) operador en JavaScript?
https://www.joezimjs.com/javascript/great-mystery-of-the-tilde/