我不确定它是否存在。有些网站显示在javascript中使用包含但是当我尝试它时不起作用。
我有
var userAgent = navigator.userAgent.split(';');
if (userAgent.contains("msie7") == true) {...}
我正在尝试使用useragent来确定用户是否在兼容模式下运行IE 8。所以我想检查一下msie7&的userAgenet。对于三叉戟4.0
那我怎么检查这个数组?
答案 0 :(得分:2)
ES v3中没有本地Array.prototype.contains
(大多数JS实现)。在Mozilla / Firefox和其他现代JS引擎中都有一个Array.prototype.indexOf可供选择采用它。
您可以使用以下代码在没有它的浏览器/引擎上实现它:https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/indexOf
然后在分配之后,您可以执行Array.prototype.contains = function(s) { return this.indexOf(s) !== -1 }
答案 1 :(得分:2)
您可以使用indexOf
来获取包含您要查找的元素的数组中的索引。因此,您可以像这样重写if
语句:
if (userAgent.indexOf("msie7") > -1) {...}
请注意,IE(至少IE6)不支持数组的indexOf
(虽然它确实适用于字符串),但您可以随时编写自己的版本:
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;
}
答案 2 :(得分:1)
最后我发现jquery有一个名为inArary的方法,我用它。所以我不必担心兼容性问题。
答案 3 :(得分:0)
您可以随时推出自己的contains(),它将适用于所有浏览器上的Array对象。
Array.prototype.contains = function(obj) {
var i = this.length;
while (i--) {
if (this[i] === obj) {
return true;
}
}
return false;
}
警告:“扩展javascript数组对象是一个非常糟糕的主意,因为您将新属性(您的自定义方法)引入了可能会破坏现有脚本的for-in循环。”
更好地使用主流库提供的功能,例如jQuery。
关于此主题的完整讨论:Javascript - array.contains(obj)
答案 4 :(得分:0)
Mootools是一个可以帮助您编写更好的跨浏览器javascript的库。它使用“包含”等方便的方法扩充了javascript基本类型(strings,arrays,numbers等)。
或者,您可以自己实施,如其他答案所示。
答案 5 :(得分:0)
您可以跳过数组并直接测试字符串,如下所示:
if (navigator.userAgent.indexOf('msie') != -1)
// ...