Javascript有一个包含函数吗?

时间:2010-08-18 01:48:55

标签: javascript

我不确定它是否存在。有些网站显示在javascript中使用包含但是当我尝试它时不起作用。

我有

var userAgent = navigator.userAgent.split(';');

if (userAgent.contains("msie7") == true) {...}

我正在尝试使用useragent来确定用户是否在兼容模式下运行IE 8。所以我想检查一下msie7&的userAgenet。对于三叉戟4.0

那我怎么检查这个数组?

6 个答案:

答案 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基本类型(stringsarraysnumbers等)。

或者,您可以自己实施,如其他答案所示。

答案 5 :(得分:0)

您可以跳过数组并直接测试字符串,如下所示:

if (navigator.userAgent.indexOf('msie') != -1)
    // ...

这里有一些some information on indexOf