Reputation: 1169
I'm trying to compare two strings in JavaScript using endsWith(), like
var isValid = string1.endsWith(string2);
It's working fine in Google Chrome and Mozilla. When comes to IE it's throwing a console error as follows
SCRIPT438: Object doesn't support property or method 'endsWith'
How can I resolve it?
Upvotes: 17
Views: 14808
Reputation: 1
Reaction on an old issue:
Elaborating on alternative for endsWith()
in IE11.
To avoid that string1 = "a", string2 = "bc"; would return true:
var isValid = (string1.lastIndexOf(string2) == (string1.length - string2.length) && string1.lastIndexOf(string2) >= 0);
Upvotes: 0
Reputation: 115242
Method endsWith()
not supported in IE. Check browser compatibility here.
You can use polyfill option taken from MDN documentation:
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;
};
}
Upvotes: 22
Reputation: 31980
It's generally bad practise to extend the prototype of a native JavaScript object. See here - Why is extending native objects a bad practice?
You can use a simple check like this that will work cross-browser:
var isValid = (string1.lastIndexOf(string2) == (string1.length - string2.length))
Upvotes: 2
Reputation: 1169
I found the simplest answer,
All you need do is to define the prototype
if (!String.prototype.endsWith) {
String.prototype.endsWith = function(suffix) {
return this.indexOf(suffix, this.length - suffix.length) !== -1;
};
}
Upvotes: 18