.includes () ไม่ทำงานใน Internet Explorer


111

รหัสนี้ใช้ไม่ได้ใน Internet Explorer ทางเลือกอื่น?

"abcde".includes("cd")

33
สองปีต่อมา IE ยังไม่รองรับ
nu everest

4
การรอให้ IE ดีขึ้นก็เหมือนกับ ... รอให้ IE ดีขึ้น
Rob_M

1
@nueverest คุณหมายถึง 3 ปีใช่มั้ย? : D
Josh

3
มีคนชอบทุกคนและลบ repo (s) สำหรับ IE จบเพียงเท่านี้
zero_cool

อีก 2 ปี - IE ยังไม่รองรับ
Piotrek Hryciuk

คำตอบ:


138

String.prototype.includes คือตามที่คุณเขียนไม่รองรับใน Internet Explorer (หรือ Opera)

String.prototype.indexOfแต่คุณสามารถใช้ #indexOfผลตอบแทนดัชนีของตัวอักษรตัวแรกของ substring -1ถ้ามันอยู่ในสตริงมิฉะนั้นผลตอบแทน (เหมือน Array เทียบเท่า)

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

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

MDN มี polyfill สำหรับincludesใช้indexOf: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill

แก้ไข: Opera สนับสนุนincludesเป็นของรุ่น 28

แก้ไข 2: Edge เวอร์ชันปัจจุบันรองรับวิธีนี้ (ข้อมูล ณ ปี 2019)


include () เป็นฟังก์ชันเดียวที่ IE ไม่รองรับหรือไม่ หรือมีฟังก์ชัน typescript หรือ JavaScript อื่น ๆ ที่ IE ไม่รองรับ?
Abdullah Feroz

10
หากเราต้องการBooleanเราสามารถทำได้(myString.indexOf('string') > -1) // to get a boolean true or false
Aakash

32

หรือใส่ลงในไฟล์ Javascript แล้วขอให้มีความสุข :)

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

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

  return returnValue;
}

หากคุณใช้โพลีฟิลล์นี้อย่าวนซ้ำสตริงของคุณด้วยfor...inมันจะวนซ้ำString.prototype.includesหากมีการกำหนดไว้เช่นนี้
Patrick Roberts

10
เวอร์ชันสั้นกว่า:return this.indexOf(str) !== -1;
แอนดรู

1
สำหรับอาร์เรย์: Array.prototype.includes = function (elt) {return this.indexOf (elt)! == -1; }
LePatay

9

รวมถึง () ไม่รองรับเบราว์เซอร์ส่วนใหญ่ ตัวเลือกของคุณสามารถใช้ได้

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

หรือใช้

-indexof ()

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

ซึ่งทำให้คุณได้ n = 2

สิ่งนี้ได้รับการสนับสนุนอย่างกว้างขวาง


หากคุณใช้โพลีฟิลล์จาก MDN อย่าย้ำสตริงของคุณด้วยfor...in! มันจะวนซ้ำString.prototype.includesถ้าคุณกำหนดแบบนั้น
Patrick Roberts

6

ปัญหา:

ลองเรียกใช้ด้านล่าง (โดยไม่มีโซลูชัน) จาก Internet Explorerและดูผลลัพธ์

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

วิธีการแก้:

ตอนนี้เรียกใช้โซลูชันด้านล่างและตรวจสอบผลลัพธ์

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

อันนี้อาจดีกว่าและสั้นกว่า:

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

IE ไม่รองรับ indexOf
Some_Dude

1
ทำงานได้ดีอย่างสมบูรณ์ใน IE11 อาจจะไม่ได้อยู่ใน IE10 แต่ปัจจุบันแทบไม่มีคนใช้เวอร์ชันนั้น
Andrew

3

ฉันมีปัญหาเดียวกันเมื่อทำงานใน Angular 5 เพื่อให้ทำงานได้โดยตรงโดยไม่ต้องเขียน polyfill ด้วยตัวเองเพียงเพิ่มบรรทัดต่อไปนี้ในไฟล์ polyfills.ts:

import "core-js/es7/array"

นอกจากนี้tsconfig.jsonส่วน lib อาจเกี่ยวข้อง:

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

คุณเพื่อนของฉันคือผู้ช่วยชีวิตที่สมบูรณ์!
CodeMan03

3

สำหรับการตอบสนอง:

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

การแก้ไขปัญหาสำหรับ - รวม () ค้นหา () และอื่น ๆ ..


1

หากคุณต้องการใช้Array.prototype.include()ในจาวาสคริปต์ต่อไปคุณสามารถใช้สคริปต์นี้: github-script-ie-include ที่จะแปลงฟังก์ชัน include () เป็น match () โดยอัตโนมัติหากตรวจพบ IE

ตัวเลือกอื่นใช้เสมอstring.match(Regex(expression))



-1

ก็ทำได้เหมือนกัน !! และ ~ ตัวดำเนินการ

 var myString = 'this is my string';

 !!~myString.indexOf('string');
 // -> true

 !!~myString.indexOf('hello');
 // -> false

นี่คือคำอธิบายของตัวดำเนินการทั้งสอง (!! และ ~)

อะไรคือ !! (ไม่ใช่) ตัวดำเนินการใน JavaScript?

https://www.joezimjs.com/javascript/great-mystery-of-the-tilde/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.