.includes () tidak berfungsi di Internet Explorer

105

Kode ini tidak berfungsi di penjelajah internet. Ada alternatif lain?

"abcde".includes("cd")
Carlosss
sumber
33
Dua tahun kemudian IE masih belum mendukungnya.
nu everest
4
Menunggu IE menjadi lebih baik seperti ... menunggu IE menjadi lebih baik.
Rob_M
1
@nueverest Maksudmu 3 tahun kan? : D
Josh
2
Seseorang membantu semua orang dan menghapus repo (s) untuk IE. Akhiri saja.
zero_cool
2 tahun lagi - IE masih belum mendukungnya
Piotrek Hryciuk

Jawaban:

131

String.prototype.includes adalah, saat Anda menulis, tidak didukung di Internet Explorer (atau Opera).

Sebagai gantinya Anda bisa menggunakan String.prototype.indexOf. #indexOfmengembalikan indeks dari karakter pertama dari substring jika ada dalam string, jika tidak maka akan dikembalikan -1. (Sama seperti Array yang setara)

var myString = 'this is my string';
myString.indexOf('string');
// -> 11

myString.indexOf('hello');
// -> -1

MDN memiliki polyfill untuk includesdigunakan indexOf: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill

EDIT: Opera mendukung includesmulai versi 28 .

EDIT 2: Versi Edge saat ini mendukung metode ini. (per 2019)

Phillip
sumber
Apakah include () satu-satunya fungsi yang tidak didukung oleh IE? Atau ada jenis script atau fungsi JavaScript lain yang tidak didukung oleh IE?
Abdullah Feroz
10
Jika kita membutuhkan Boolean, kita bisa(myString.indexOf('string') > -1) // to get a boolean true or false
Akash
32

Atau taruh saja ini dalam file Javascript dan semoga harimu menyenangkan :)

String.prototype.includes = function (str) {
  var returnValue = false;

  if (this.indexOf(str) !== -1) {
    returnValue = true;
  }

  return returnValue;
}
Prasun
sumber
Jika Anda menggunakan polyfill ini, jangan mengulang string Anda dengan for...in, itu akan mengulangi String.prototype.includesjika didefinisikan seperti ini.
Patrick Roberts
10
Versi yang lebih pendek:return this.indexOf(str) !== -1;
Andrew
1
Untuk array: Array.prototype.includes = function (elt) {return this.indexOf (elt)! == -1; }
LePatay
9

include () tidak didukung oleh sebagian besar browser. Pilihan Anda bisa digunakan

-polyfill dari MDN https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes

atau untuk digunakan

-Indeks()

var str = "abcde";
var n = str.indexOf("cd");

Yang memberi Anda n = 2

Ini didukung secara luas.

deeveeABC
sumber
Jika Anda menggunakan polyfill dari MDN, jangan mengulangi string Anda dengan for...in! , ini akan berulang String.prototype.includesjika Anda mendefinisikannya seperti itu.
Patrick Roberts
6

Masalah:

Coba jalankan di bawah ini (tanpa solusi) dari Internet Explorer dan lihat hasilnya.

console.log("abcde".includes("cd"));

Larutan:

Sekarang jalankan solusi di bawah ini dan periksa hasilnya

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

Joe
sumber
4

Yang ini mungkin lebih baik dan lebih pendek:

function stringIncludes(a, b) {
    return a.indexOf(b) >= 0;
}
Skwall
sumber
indexOf tidak didukung oleh IE
Some_Dude
1
Ia bekerja dengan baik di IE11. Mungkin tidak di IE10, tetapi hampir tidak ada orang yang masih menggunakan versi itu saat ini.
Andrew
3

Saya mengalami masalah yang sama saat bekerja di Angular 5. Untuk membuatnya bekerja secara langsung tanpa menulis sendiri polyfill, cukup tambahkan baris berikut ke file polyfills.ts:

import "core-js/es7/array"

Juga, tsconfig.jsonbagian lib mungkin relevan:

"lib": [
  "es2017",
  "dom"
],
Alexei
sumber
Anda teman saya adalah penyelamat yang lengkap!
CodeMan03
2

Untuk bereaksi:

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

Penyelesaian masalah untuk - termasuk (), find (), dan seterusnya ..

niket bajaj
sumber
1

Jika Anda ingin tetap menggunakan Array.prototype.include()javascript, Anda dapat menggunakan skrip ini: github-script-ie-include Yang mengubah fungsi include () menjadi match () secara otomatis jika fungsi tersebut mendeteksi IE.

Opsi lainnya adalah selalu menggunakanstring.match(Regex(expression))

mikeTeixeira88
sumber
1

Ini bekerja untuk saya:

function stringIncludes(a, b) {
      return a.indexOf(b) !== -1;
}
Abel Valdez
sumber