.includes () tidak berfungsi di Internet Explorer


105

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

"abcde".includes("cd")

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)


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

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.


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


4

Yang ini mungkin lebih baik dan lebih pendek:

function stringIncludes(a, b) {
    return a.indexOf(b) >= 0;
}

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"
],

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 ..


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


1

Ini bekerja untuk saya:

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.