web-dev-qa-db-ja.com

JavaScriptのendsWithはIEv10で動作していませんか?

次のように、endsWith()を使用してJavaScriptで2つの文字列を比較しようとしています

var isValid = string1.endsWith(string2);

Google ChromeおよびMozillaで正常に動作しています。IEになると、次のようにコンソールエラーがスローされます。

SCRIPT438: Object doesn't support property or method 'endsWith' 

どうすれば解決できますか?

13

メソッドendsWith()はIEではサポートされていません。 ブラウザの互換性はこちら を確認してください。

MDNドキュメント から取得したpolyfillオプションを使用できます。

if (!String.prototype.endsWith) {
  String.prototype.endsWith = function(searchString, position) {
      var subjectString = this.toString();
      if (typeof position !== 'number' || !isFinite(position) 
          || Math.floor(position) !== position || position > subjectString.length) {
        position = subjectString.length;
      }
      position -= searchString.length;
      var lastIndex = subjectString.indexOf(searchString, position);
      return lastIndex !== -1 && lastIndex === position;
  };
}
18
Pranav C Balan

私は最も簡単な答えを見つけました、

必要なのはプロトタイプを定義することだけです

 if (!String.prototype.endsWith) {
   String.prototype.endsWith = function(suffix) {
     return this.indexOf(suffix, this.length - suffix.length) !== -1;
   };
 }
12

一般に、ネイティブJavaScriptオブジェクトのプロトタイプを拡張することはお勧めできません。ここを参照してください- なぜネイティブオブジェクトの拡張が悪い習慣なのですか?

クロスブラウザーで機能する次のような簡単なチェックを使用できます。

var isValid = (string1.lastIndexOf(string2) == (string1.length - string2.length))
2
Chris Halcrow

古い問題に対する反応:IE11のendsWith()の代替案について詳しく説明します。

String1 = "a"、string2 = "bc"を回避するには、 trueを返します。

var isValid = (string1.lastIndexOf(string2) == (string1.length - string2.length) && string1.lastIndexOf(string2) >= 0);
0
HansW