IE物件不支援此屬性或方法: this.indexOf 的解決方法
阿新 • • 發佈:2019-02-15
函式說明:
js中的indexOf方法的作用是:
根據給定引數x返回目標字串(可以看成字元的陣列)或陣列中與x相等的項的索引。
這個方法相當有用,很多程式語言中都有相對應的實現,javascript中也不例外,但是在ie8-中執行如下程式碼:
<script type="text/javascript">
var arr = [1,2,3];
alert(arr.indexOf(1));
</script>
卻被提示“物件不支援此屬性和方法” 。而在chrome,firefox下去執行良好。google發現原來js中Array的indexOf方法在js1.6版本中才給予了實現,ie7,8中只實現到了js1.3版本,chrome為js1.7版本,ff為js1.8版本。
解決方法:
針對ie進行擴充套件, 程式碼如下:
if(!Array.prototype._indexOf){
Array.prototype._indexOffunction(n){
if("indexOf" in this){
return this["indexOf" ](n);
}
for(var i=0;i<this.length;i++){
if(n===this[i]){
return i;
}
}
return -1;
};
};
使用舉例:
<script type="text/javascript">
var arr = ["1","2","3"];
alert(arr._indexOf("2"));
</script >
這裡我們針對Array的原型進行了擴充套件,在擴充套件方法的命名上加上了”_”字元,我認為這是一個好的習慣,當你在針對原型進行擴充套件的時候有必要對自己的擴充套件加以標記。
在_indexOf方法中,我們首先判斷當前Array是否實現了“indexOf” 方法,如果是的話直接呼叫系統發法,否則進行遍歷。