我有一个以下功能,可以在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];
}
}
}
有人能告诉我这个功能有什么问题吗?
答案 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;
};
}