I am not sure if it does or does not. Some sites show using a contains in javascript but when I try it does not work.
I have
var userAgent = navigator.userAgent.split(';');
if (userAgent.contains("msie7") == true) {...}
I am trying to use the useragent to figure out if the user is running IE 8 in compatibility mode. So I want to check the userAgenet for msie7 & for the trident 4.0
So how could I check this array?
There is no native Array.prototype.contains
in ES v3 ( most JS implementations ). There is an Array.prototype.indexOf available in Mozilla/Firefox and other modern JS engines which choose to adopt it.
You can use the code below to implement it on browsers/engines that dont have it: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/indexOf
Then after assigning it you can do Array.prototype.contains = function(s) { return this.indexOf(s) !== -1 }
You can use indexOf
to get the index in the array which contains the element you're looking for. So you could rewrite your if
statement like this:
if (userAgent.indexOf("msie7") > -1) {...}
Note that IE (at least IE6) doesn't support indexOf
for arrays (it does work on strings though), but you could always write your own version:
if (typeof Array.prototype.indexOf == 'undefined')
Array.prototype.indexOf = function(e) {
for (var i = 0; i < this.length; i++)
if (this[i] == e)
return i;
return -1;
}
In the end I found out that jquery has a method called inArary and I used this. So I should not have to worry about compatibility issues.
You can always roll out your own contains() which will work on Array objects on all browsers.
Array.prototype.contains = function(obj) {
var i = this.length;
while (i--) {
if (this[i] === obj) {
return true;
}
}
return false;
}
Caveat: "Extending the javascript Array object is a really bad idea because you introduce new properties (your custom methods) into for-in loops which can break existing scripts."
Better use the functions provided by a mainstream library such as jQuery.
Full discussion on this topic: Javascript - array.contains(obj)
You could skip the array and test the string directly, like this:
if (navigator.userAgent.indexOf('msie') != -1)
// ...
Here's some some information on indexOf .
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.