.includes () không hoạt động trong Internet Explorer


103

Mã này không hoạt động trong trình khám phá internet. Bất kỳ thay thế?

"abcde".includes("cd")

32
Hai năm sau IE vẫn không hỗ trợ nó.
nu everest

4
Chờ đợi IE trở nên tốt hơn cũng giống như ... chờ đợi IE trở nên tốt hơn.
Rob_M

1
@nueverest Ý bạn là 3 năm phải không? : D
Josh

2
Ai đó giúp đỡ mọi người và xóa (các) repo cho IE. Chỉ cần kết thúc nó.
zero_cool

2 năm nữa - IE vẫn không hỗ trợ nó
Piotrek Hryciuk

Câu trả lời:


130

String.prototype.includes như bạn viết, không được hỗ trợ trong Internet Explorer (hoặc Opera).

Thay vào đó bạn có thể sử dụng String.prototype.indexOf. #indexOftrả về chỉ số của ký tự đầu tiên của chuỗi con nếu nó nằm trong chuỗi, nếu không thì trả về -1. (Giống như mảng tương đương)

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

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

MDN có một polyfill để includessử dụng indexOf: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill

CHỈNH SỬA: Opera hỗ trợ includeskể từ phiên bản 28 .

CHỈNH SỬA 2: Các phiên bản Edge hiện tại hỗ trợ phương pháp này. (tính đến năm 2019)


Bao gồm () là hàm duy nhất không được IE hỗ trợ? Hoặc có các hàm sắp chữ hoặc JavaScript khác không được IE hỗ trợ?
Abdullah Feroz

10
Nếu chúng tôi cần một Boolean, chúng tôi có thể(myString.indexOf('string') > -1) // to get a boolean true or false
Akash

32

Hoặc chỉ cần đặt điều này trong một tệp Javascript và có một ngày tốt lành :)

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

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

  return returnValue;
}

Nếu bạn sử dụng polyfill này, đừng lặp lại chuỗi của bạn với for...in, nó sẽ lặp lại String.prototype.includesnếu nó được định nghĩa như thế này.
Patrick Roberts

10
Phiên bản ngắn hơn:return this.indexOf(str) !== -1;
Andrew

1
Đối với mảng: Array.prototype.includes = function (elt) {return this.indexOf (elt)! == -1; }
LePatay,

9

bao gồm () không được hỗ trợ bởi hầu hết các trình duyệt. Tùy chọn của bạn là sử dụng

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

hoặc để sử dụng

-Chỉ số()

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

Cho bạn n = 2

Điều này được ủng hộ rộng rãi.


Nếu bạn sử dụng polyfill từ MDN, không lặp lại chuỗi của bạn với for...in! , nó sẽ lặp lại String.prototype.includesnếu bạn định nghĩa nó như vậy.
Patrick Roberts

6

Vấn đề:

Hãy thử chạy bên dưới (không có giải pháp) từ Internet Explorer và xem kết quả.

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

Giải pháp:

Bây giờ chạy giải pháp bên dưới và kiểm tra kết quả

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

Cái này có thể tốt hơn và ngắn hơn:

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

indexOf không được IE hỗ trợ
Some_Dude 10/07/18

1
Nó hoạt động hoàn toàn tốt trong IE11. Có thể nó không có trong IE10, nhưng hiện nay hầu như không có người sử dụng phiên bản đó.
Andrew

3

Tôi đã gặp vấn đề tương tự khi làm việc trong Angular 5. Để làm cho nó hoạt động trực tiếp mà không cần tự viết polyfill, chỉ cần thêm dòng sau vào tệp polyfills.ts:

import "core-js/es7/array"

Ngoài ra, tsconfig.jsonphần lib có thể có liên quan:

"lib": [
  "es2017",
  "dom"
],

Bạn, bạn của tôi là một cứu cánh hoàn chỉnh!
CodeMan03

2

Đối với phản ứng:

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

Giải quyết vấn đề cho - bao gồm (), tìm (), v.v.


1

Nếu bạn muốn tiếp tục sử dụng Array.prototype.include()trong javascript, bạn có thể sử dụng tập lệnh này: github-script-ie-include Điều đó sẽ tự động chuyển đổi hàm include () thành hàm match () nếu nó phát hiện ra IE.

Tùy chọn khác luôn sử dụngstring.match(Regex(expression))


1

Nó hoạt động cho tôi:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.