Подтвердить что ты не робот

Т.е. не поддерживает метод "включает"

Я работаю над проектом и разрабатываю фреймворк JavaScript. Исходный код - около 700 строк, поэтому я только вставил эту строку. Метод включения не работает в Internet Explorer. Есть ли какое-либо решение для этого?

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));

... Код продолжается

4b9b3361

Ответ 1

Поскольку он не поддерживается в IE, он не поддерживается и в Opera (см. Таблицу совместимости), но вы можете использовать предложенный polyfill:

Polyfill

Этот метод был добавлен в спецификацию ECMAScript 2015 и может быть доступен не во всех реализациях JavaScript. Тем не менее, вы можете легко заполнить этот метод:

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;
    }
  };
}

Ответ 2

@Infer-on показал отличный ответ, но он имеет проблему в конкретной ситуации. Если вы используете цикл for-in, он будет включать в себя добавленную функцию "включает".

Вот еще один 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;
      }
  });
}

Ответ 3

Вы можете просто использовать .search() > -1, который ведет себя точно так же. http://www.w3schools.com/jsref/jsref_search.asp

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

Ответ 4

Этот Отобранный ответ для String. Если вы ищете 'include' в массиве, я решил мою проблему, добавив следующее в мой файл polyfills.ts:

import 'core-js/es7/array';

Ответ 5

Это polyfill для проектов TypeScript, взятый из https://developer.mozilla.org/nl/docs/Web/JavaScript/Reference/Global_Objects/Array/includes и измененный, чтобы быть действительным 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;
        }
    });
}

Ответ 6

if (fullString.indexOf("partString") >= 0) {
//true 

} else {
//false
}

Ответ 7

Для реакции:

import 'react-app-polyfill/ie11';
import 'core-js/es5';
import 'core-js/es6';
import 'core-js/es7';