.includes()がInternet Explorerで機能しない


104

このコードはInternet Explorerでは機能しません。代替案はありますか?

"abcde".includes("cd")

32
2年後、IEはまだそれをサポートしていません。
nu everest

4
IEの改善を待つのは、IEの改善を待つようなものです。
Rob_M

1
@nueverest 3年ということですか?:D
ジョシュ

2
誰かがみんなに賛成してIEのリポジトリを削除します。終わらせて。
zero_cool

さらに2年間
-IE

回答:


130

String.prototype.includes あなたが書いているように、Internet Explorer(またはOpera)ではサポートされていません。

代わりにを使用できますString.prototype.indexOf#indexOf文字列内にある場合は部分文字列の最初の文字のインデックスを返し、それ以外の場合はを返します-1。(配列同等のものと非常に似ています)

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

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

MDNは用ポリフィル持ってincludes使用してindexOfhttps://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill

編集:Opera includesバージョン28からサポートしています。

編集2:Edgeの現在のバージョンはこの方法をサポートしています。(2019年現在)


include()はIEでサポートされていない唯一の関数ですか?または、IEでサポートされていない他のtypescriptまたはJavaScript関数がありますか?
Abdullah Feroz

10
が必要な場合はBoolean、次のことができます(myString.indexOf('string') > -1) // to get a boolean true or false
Akash

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

1
配列の場合:Array.prototype.includes = function(elt){return this.indexOf(elt)!== -1; }
LePatay

9

contains()は、ほとんどのブラウザでサポートされていません。あなたのオプションはどちらかを使用することです

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

または使用する

-の指標()

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

indexOfはIEでサポートされていません
Some_Dude

1
IE11では完全に正常に動作します。IE10にはないかもしれませんが、今日でもそのバージョンを使用している人はほとんどいません。
Andrew

3

Angular 5で作業しているときにも同じ問題が発生しました。ポリフィルを自分で作成せずに直接機能させるには、polyfills.tsファイルに次の行を追加します。

import "core-js/es7/array"

また、tsconfig.jsonlibセクションが関連している可能性があります。

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

あなたは私の友人は完全な命の恩人です!
CodeMan03

2

反応のため:

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

問題の解決-include()、find()など。


1

Array.prototype.include()JavaScriptで引き続き使用したい場合は、次のスクリプトを使用できます 。github-script-ie-include IEを検出すると、include()をmatch()関数に自動的に変換します。

他のオプションは常に使用していますstring.match(Regex(expression))



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.