SCRIPT438:对象不支持IE10中的属性或方法'endsWith'

时间:2015-04-03 15:13:17

标签: javascript internet-explorer

我有一个以下功能,可以在Chrome中正常工作,但它在IE10中给出了以下错误 SCRIPT438: Object doesn't support property or method 'endsWith'

function getUrlParameter(URL, param){
    var paramTokens = URL.slice(URL.indexOf('?') + 1).split('&');
    for (var i = 0; i < paramTokens.length; i++) {
    var urlParams = paramTokens[i].split('=');
    if (urlParams[0].endsWith(param)) {
        return urlParams[1];
    }
  }
}

有人能告诉我这个功能有什么问题吗?

3 个答案:

答案 0 :(得分:38)

已实施endsWith,如下所示

String.prototype.endsWith = function(pattern) {
  var d = this.length - pattern.length;
  return d >= 0 && this.lastIndexOf(pattern) === d;
};

答案 1 :(得分:16)

您应该使用以下代码在不支持它的浏览器中实现endsWith

if (!String.prototype.endsWith) {
    String.prototype.endsWith = function(search, this_len) {
        if (this_len === undefined || this_len > this.length) {
            this_len = this.length;
        }
        return this.substring(this_len - search.length, this_len) === search;
    };
}

这是直接来自Mozilla Developer Network,并且符合标准,与目前为止给出的其他答案不同。

答案 2 :(得分:0)

IE v.11及以下版本不支持某些ES6属性,例如set,endsWith等。因此,您需要为单个ES6属性添加polyfills。 为了简化此过程,您可以使用诸如 Babel JS 之类的编译器或诸如 polyfill.js 等之类的外部库。

对于在index.html中的标记之前或在捆绑发生之前在代码段下面添加以下内容的结尾。

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