web-dev-qa-db-fra.com

ie ne supporte pas la méthode 'includes'

J'ai travaillé sur un projet et développé un framework JavaScript. Le code original est d'environ 700 lignes, je n'ai donc collé que cette ligne. La méthode includes ne fonctionne pas sur Internet Explorer. Existe-t-il une solution à ça?

var row_cells = tbl_row.match(/<td[\s\S]*?<\/td>/g);

    row.Cells = new Array();
    if (onRowBindFuncText != null) { /*Fonksyon tanımlanmaışsa daha hızlı çalış*/

        var cellCount = 0;
        for (i = 0; i < row_cells.length; i++) {

            var cell = new Cell();
            $.each(this, function (k, v) {

                if ((row_cells[i]+"").includes("#Eval(" + k + ")")) {

                    cell.Keys.Push(new Key(k,v));

... Le code continue

44

Parce que ce n'est pas supporté par IE, il ne l'est pas non plus dans Opera ( voir le tableau de compatibilité ), mais vous pouvez utiliser le suggéré polyfill =:

Polyfill

Cette méthode a été ajoutée à la spécification ECMAScript 2015 et n'est peut-être pas encore disponible dans toutes les mises en œuvre de JavaScript. Cependant, vous pouvez facilement polyfill cette méthode:

if (!String.prototype.includes) {
  String.prototype.includes = function(search, start) {
    'use strict';
    if (typeof start !== 'number') {
      start = 0;
    }

    if (start + search.length > this.length) {
      return false;
    } else {
      return this.indexOf(search, start) !== -1;
    }
  };
}
63
alessandro

@ Infer-on a montré une excellente réponse, mais cela pose un problème dans une situation donnée. Si vous utilisez la boucle for-in, elle renverra la fonction "includes" que vous avez ajoutée.

Voici un autre pollyfill.

if (!Array.prototype.includes) {
  Object.defineProperty(Array.prototype, "includes", {
    enumerable: false,
    value: function(obj) {
        var newArr = this.filter(function(el) {
          return el == obj;
        });
        return newArr.length > 0;
      }
  });
}
34
Sunho Hong

Vous pouvez simplement utiliser .search ()> -1 qui se comporte exactement de la même manière. http://www.w3schools.com/jsref/jsref_search.asp

if ((row_cells[i]+"").search("#Eval(" + k + ")") > -1) {
11
Patrick Duncan

Cette réponse sélectionnée concerne String. Si vous recherchez 'includes' sur un tableau, j'ai résolu mon problème en ajoutant le texte suivant à mon fichier polyfills.ts:

import 'core-js/es7/array';
4
patrickbadley

Ceci est un polyfill pour les projets TypeScript, tiré de https://developer.mozilla.org/nl/docs/Web/JavaScript/Reference/Global_Objects/Array/includes et modifié pour être valide TypeScript:

if (!Array.prototype.includes) {
    Object.defineProperty(Array.prototype, 'includes', {
        value: function(searchElement, fromIndex) {

            if (this == null) {
                throw new TypeError('"this" is null or not defined');
            }

            const o = Object(this);
            // tslint:disable-next-line:no-bitwise
            const len = o.length >>> 0;

            if (len === 0) {
                return false;
            }
            // tslint:disable-next-line:no-bitwise
            const n = fromIndex | 0;
            let k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);

            while (k < len) {
                if (o[k] === searchElement) {
                    return true;
                }
                k++;
            }
            return false;
        }
    });
}
2
mvermand
if (fullString.indexOf("partString") >= 0) {
//true 

} else {
//false
}
0
user11374562