2010-08-18 60 views
1

我不確定它是否確實。有些網站在javascript中顯示使用了一個包含,但是當我嘗試它時不起作用。Javascript有一個包含函數嗎?

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

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

我試圖使用用戶代理弄清楚,如果用戶在兼容模式下運行IE 8。所以我想檢查userAgenet的msie7 &三叉戟4.0

那麼我怎麼能檢查這個數組?

+0

試試這個鏈接http://forums.asp.net/post/4238818.aspx – 2012-10-22 07:07:07

回答

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 }

+0

請注意,他做了一個'split',所以'userAgent'是一個數組,而不是一個字符串。無論哪種情況,'indexOf'都可以工作。 – casablanca 2010-08-18 01:51:25

+0

我怎樣才能做得更清楚?我試過userAgent [],但它不喜歡那樣。我應該把它稱爲userAgentArray(我認爲在C#中有什麼不好的做法,但不知道javascript) – chobo2 2010-08-18 18:53:13

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; 
    } 
+0

我可能會檢查它是否爲空。我不支持IE 6.我只是想出了一個拒絕標誌。 – chobo2 2010-08-18 01:55:46

+1

IE6,7或8都不支持該方法,它最近在IE9平臺預覽中實現。我會推薦[this](https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/indexOf)符合標準的版本。它可以採用第二個'fromIndex'參數,使用嚴格的比較運算符('===')等等...... – CMS 2010-08-18 02:01:11

0

您可以隨時推出自己的包含(),這將在所有的瀏覽器陣列對象。

Array.prototype.contains = function(obj) { 
    var i = this.length; 
    while (i--) { 
     if (this[i] === obj) { 
      return true; 
     } 
    } 
    return false; 
} 

警告:「擴展JavaScript的數組對象是一個非常糟糕的主意,因爲你介紹新的屬性(自定義方法)轉換成可以打破現有的腳本,在迴路」

更好地使用jQuery等主流庫提供的功能。關於這一主題

充分討論:Javascript - array.contains(obj)

+0

「警告」 - 不管怎麼說都不要使用'for-in',因爲許多庫會擴展沒有你意識到它的原型。 – casablanca 2010-08-18 17:06:23

0

Mootools是一個庫,可以幫助你寫出更好的跨瀏覽器的JavaScript。它使用'contains'等方便的方法來擴充JavaScript基本類型(stringsarraysnumbers等)。

或者,您可以自己實現它,如其他答案中所見。

0

你可以跳過陣列和直接測試字符串,像這樣:

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

這裏的一些some information on indexOf

1

最後我發現jquery有一個名爲inArary的方法,我用它。所以我不必擔心兼容性問題。

相關問題