最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

為JS擴(kuò)展Array.prototype.indexOf引發(fā)的問(wèn)題及解決辦法

 更新時(shí)間:2015年01月21日 14:51:05   投稿:hebedich  
這篇文章主要介紹了為JS擴(kuò)展Array.prototype.indexOf引發(fā)的問(wèn)題及解決辦法,需要的朋友可以參考下

Array沒(méi)有indexOf方法,這樣在一個(gè)數(shù)組中查找某個(gè)元素的索引時(shí)比較麻煩,為了調(diào)用方便,于是通過(guò)prototype原型擴(kuò)展了Array.prototype.indexOf(),這樣用起來(lái)就比較方便了。但是這個(gè)自定義的indexOf在對(duì)數(shù)組進(jìn)行遍歷的時(shí)候卻出現(xiàn)了問(wèn)題。

復(fù)制代碼 代碼如下:

Array.prototype.indexOf = function(item) { 
for (var i = 0; i < this.length; i++) { 
if (this[i] == item) 
return i; 

return -1; 
}

用的時(shí)候直接

復(fù)制代碼 代碼如下:

var arr=[1,2,3,4,5]; 
var index=arr.indexOf(1); //index==0

擴(kuò)展了以后,用起來(lái)很爽很方便,一片和諧景象...

但是某次是遍歷數(shù)組元素的時(shí)候,使用for..in..循環(huán),引發(fā)了其他的問(wèn)題,打破了這個(gè)和諧的氛圍。

復(fù)制代碼 代碼如下:

var a=["張飛","關(guān)羽","劉備","呂布"]; 
for(var p in a){ 
  document.write(p+"="+a[p]+"<br/>"); 
}

本來(lái)想輸出這四個(gè)人的名字,結(jié)果輸出的是什么呢?

輸出的居然是:

復(fù)制代碼 代碼如下:

//0=張飛 
//1=關(guān)羽 
//2=劉備 
//3=呂布 
//indexOf=function(item) { for (var i = 0; i < this.length; i++) { if (this[i] == item) return i; } return -1; } 

除了把名字打出來(lái)以外,還額外輸出了自己擴(kuò)展的方法indexOf,但是令人瘋狂的是,firefox卻是“正?!钡模挥兴膫€(gè)人的人名,為什么會(huì)這樣?

輸出indexOf,自己擴(kuò)展的,可以理解,畢竟for..in是遍歷一個(gè)對(duì)象的所有用戶(hù)定義的屬性或者一個(gè)數(shù)組的所有元素。

那么firefox為什么不會(huì)?

后來(lái)查了資料才明白,

Array在javascript1.6版本已經(jīng)支持Array.indexOf(),而我用的firefox是3.5版本,已經(jīng)支持javascript1.8了,indexOf是其Array本身固有的方法了。

而IE,即使我用的是IE8,也才支持到j(luò)avascript1.3版本。

所以IE8認(rèn)為indexOf是“用戶(hù)定義的屬性”,而firefox認(rèn)為是自己原生支持的固有的屬性。

真的是這樣嗎?

做個(gè)實(shí)驗(yàn),把indexOf更名為myIndexOf,再試試,結(jié)果IE和firefox都輸出myIndexOf,證明前面的觀點(diǎn)是正確。

那么又來(lái)了個(gè)問(wèn)題,我擴(kuò)展indexOf很久了,現(xiàn)在不少項(xiàng)目的代碼都已經(jīng)在使用這個(gè)方法,而現(xiàn)在我非要使用for..in輸出數(shù)組本身的元素,不要其他我自己擴(kuò)展到俄方法,怎么辦?

好在javascript提供了hasOwnProperty方法。

看一下其描述:

復(fù)制代碼 代碼如下:

Every object descended from Object inherits the hasOwnProperty method. This method can be used to determine whether an object has the specified property as a direct property of that object; unlike the in operator, this method does not check down the object's prototype chain

看描述,就是我們想要的東西。

在for...in..里做個(gè) 判斷就OK了

復(fù)制代碼 代碼如下:

if(a.hasOwnProperty(p)){ 
            document.write(p+"="+a[p]+"<br/>"); 
        }

另外,附上hasOwnProperty用法示例,來(lái)源于互聯(lián)網(wǎng):

復(fù)制代碼 代碼如下:

function Book(title, author) { 
   this.title = title; 
   this.author = author; 
  } 
   Book.prototype.price = 9.99; 
   Object.prototype.copyright = "herongyang.com"; 
   var myBook = new Book("JavaScript Tutorials", "Herong Yang"); 
   // Dumping built-in properties at the base prototype level 
   document.writeln("/nObject.prototype's built-in properties:"); 
   dumpProperty(Object.prototype, "constructor"); 
   dumpProperty(Object.prototype, "hasOwnProperty"); 
   dumpProperty(Object.prototype, "isPrototypeOf"); 
   dumpProperty(Object.prototype, "toString"); 
   dumpProperty(Object.prototype, "valueOf"); 
   dumpProperty(Object.prototype, "copyright"); 
   // Dumping built-in properties at the my prototype level 
   document.writeln("/n==================/nBook.prototype's built-in properties:"); 
   dumpProperty(Book.prototype, "constructor"); 
   dumpProperty(Book.prototype, "hasOwnProperty"); 
   dumpProperty(Book.prototype, "isPrototypeOf"); 
   dumpProperty(Book.prototype, "toString"); 
   dumpProperty(Book.prototype, "valueOf"); 
   dumpProperty(Book.prototype, "copyright"); 
   // Dumping built-in properties at the object level 
   document.writeln("/n==================/nmyBook's built-in properties:"); 
   dumpProperty(myBook, "constructor"); 
   dumpProperty(myBook, "hasOwnProperty"); 
   dumpProperty(myBook, "isPrototypeOf"); 
   dumpProperty(myBook, "toString"); 
   dumpProperty(myBook, "valueOf"); 
   dumpProperty(myBook, "copyright"); 
function dumpProperty(object, property) { 
   var inheritance;  
   if (object.hasOwnProperty(property))  
      inheritance = "Local"; 
   else 
      inheritance = "Inherited"; 
   document.writeln(property+": "+inheritance+": "
      +object[property]); 
}

查看瀏覽器支持javascript到哪個(gè)版本:

復(fù)制代碼 代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" <head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  <title>瀏覽器的JavaScript版本支持測(cè)試</title> 
 </head> 
 <body> 
   <script language="JavaScript">   
   //document.write("您的瀏覽器類(lèi)型:"+navigator.appName+"<br/>"); 
   //document.write("瀏覽器版本:"+navigator.appVersion+"<br/>"); 
      //支持JavaScript1.0的瀏覽器才能夠執(zhí)行該腳本   
      document.write('該瀏覽器支持JavaScript1.0<br/>');   
  </script>   
  <script language="JavaScript1.1">   
      //支持JavaScript1.1的瀏覽器才能夠執(zhí)行該腳本  
      document.write('該瀏覽器支持JavaScript1.1<br/>');   
  </script>   
  <script language="JavaScript1.2">   
      //支持JavaScript1.2的瀏覽器才能夠執(zhí)行該腳本   
      document.write('該瀏覽器支持JavaScript1.2<br/>');   
  </script>   
  <script language="JavaScript1.3">   
      //支持JavaScript1.3的瀏覽器才能夠執(zhí)行該腳本  
      document.write('該瀏覽器支持JavaScript1.3<br/>');   
  </script>   
  <script language="JavaScript1.4">   
      //支持JavaScript1.4的瀏覽器才能夠執(zhí)行該腳本   
      document.write('該瀏覽器支持JavaScript1.4<br/>');   
  </script>   
  <script language="JavaScript1.5">   
      //支持JavaScript1.5的瀏覽器才能夠執(zhí)行該腳本   
      document.write('該瀏覽器支持JavaScript1.5<br/>');   
  </script> 
  <script language="JavaScript1.6">   
      //支持JavaScript1.6的瀏覽器才能夠執(zhí)行該腳本   
      document.write('該瀏覽器支持JavaScript1.6<br/>');   
  </script> 
  <script   language="JavaScript1.7">   
      //支持JavaScript1.7的瀏覽器才能夠執(zhí)行該腳本   
      document.write('該瀏覽器支持JavaScript1.7<br/>');   
  </script> 
  <script language="JavaScript1.8">   
      //支持JavaScript 1.8的瀏覽器才能夠執(zhí)行該腳本   
      document.write('該瀏覽器支持JavaScript1.8<br/>');   
  </script> 
  <script language="JavaScript1.9">   
      //支持JavaScript1.9的瀏覽器才能夠執(zhí)行該腳本   
      document.write('該瀏覽器支持JavaScript1.9<br/>');   
  </script>  
 </body> 
</html>

相關(guān)文章

  • 深入了解JavaScript中的Symbol的使用方法

    深入了解JavaScript中的Symbol的使用方法

    這篇文章主要介紹了深入了解JavaScript中的Symbol的使用方法,本文針對(duì)ES6版本的JS進(jìn)行講解,需要的朋友可以參考下
    2015-07-07
  • js改變css樣式的三種方法推薦

    js改變css樣式的三種方法推薦

    下面小編就為大家?guī)?lái)一篇js改變css樣式的三種方法推薦。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • 菜鳥(niǎo)javascript基礎(chǔ)資料整理2

    菜鳥(niǎo)javascript基礎(chǔ)資料整理2

    JavaScript 對(duì)象,這里涉及到變量與數(shù)組等的使用。
    2010-12-12
  • 詳解JavaScript對(duì)W3C DOM模版的支持情況

    詳解JavaScript對(duì)W3C DOM模版的支持情況

    這篇文章主要介紹了詳解JavaScript對(duì)W3C DOM模版的支持情況,在JS前端編程的兼容性方面可作參考使用,需要的朋友可以參考下
    2015-06-06
  • javascript學(xué)習(xí)筆記_淺談基礎(chǔ)語(yǔ)法,類(lèi)型,變量

    javascript學(xué)習(xí)筆記_淺談基礎(chǔ)語(yǔ)法,類(lèi)型,變量

    下面小編就為大家?guī)?lái)一篇javascript學(xué)習(xí)筆記_淺談基礎(chǔ)語(yǔ)法,類(lèi)型,變量。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09
  • JavaScript中g(shù)etUTCSeconds()方法的使用詳解

    JavaScript中g(shù)etUTCSeconds()方法的使用詳解

    這篇文章主要介紹了JavaScript中g(shù)etUTCSeconds()方法的使用詳解,是JS入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-06-06
  • JavaScript中setTimeout和setInterval函數(shù)的傳參及調(diào)用

    JavaScript中setTimeout和setInterval函數(shù)的傳參及調(diào)用

    這篇文章主要介紹了JavaScript中setTimeout和setInterval函數(shù)的傳參及調(diào)用,著兩個(gè)函數(shù)可以把要執(zhí)行的代碼在設(shè)定的一個(gè)時(shí)間點(diǎn)插入js引擎維護(hù)的一個(gè)代碼隊(duì)列中,需要的朋友可以參考下
    2016-03-03
  • 徹底理解js面向?qū)ο笾^承

    徹底理解js面向?qū)ο笾^承

    這篇文章主要介紹了js面向?qū)ο笾^承的相關(guān)知識(shí),以及分享了讀者弄明白這個(gè)知識(shí)點(diǎn)的學(xué)習(xí)心得,對(duì)此有需要的朋友參考下吧。
    2018-02-02
  • DOM 基本方法

    DOM 基本方法

    dom 的一些基本方法,是操作html標(biāo)簽的一些必備常識(shí)。只有掌握了這些基礎(chǔ),才可以做出更好的效果。
    2009-07-07
  • 12種不宜使用的Javascript語(yǔ)法整理

    12種不宜使用的Javascript語(yǔ)法整理

    Javascript語(yǔ)法,初學(xué)js的朋友都應(yīng)該知道,下面整理了12種不宜使用的js語(yǔ)法,感興趣的朋友可以參考下
    2013-11-11

最新評(píng)論

历史| 阿合奇县| 河北区| 常德市| 东海县| 兴国县| 同德县| 大埔县| 买车| 个旧市| 双辽市| 呼伦贝尔市| 玉溪市| 社会| 略阳县| 浮山县| 应用必备| 富阳市| 台南市| 田东县| 合山市| 鄂尔多斯市| 北海市| 沾益县| 乌拉特中旗| 海宁市| 桑日县| 会泽县| 星座| 汤原县| 商南县| 华蓥市| 崇义县| 河池市| 同心县| 英山县| 集贤县| 专栏| 西乌| 郴州市| 札达县|