国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - js教程 - javascript類數組的深入理解

javascript類數組的深入理解

2022-02-15 18:07ら淡然如雪 js教程

這篇文章主要給大家介紹了關于javascript類數組的深入理解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

js數組,相比大家都很熟悉,因為走到哪都要用,但它有個“雙胞胎弟弟” ,叫類數組(也叫偽數組),可能有的人了解,有的人不了解,今天我們來看一看。

什么是類數組

顧名思義,這玩意兒肯定是個長得像數組,但又不算數組的東西。那到底是個啥,其實它就是一個對象,一個長的像數組的對象。

和數組的區別

那類數組和數組有啥區別:
1、都有length屬性
2、類數組也可以for循環遍歷,有的類數組還可以通過 for of 遍歷
3、類數組不具備數組的原型方法,因此類數組不可調用相關數組方法(如,push,slicec,concat等等)

都有哪些類數組

常見的類數組有

  • 函數的參數arguments
  • 通過getElementsByTagName,getElementsByClassName,getElementsByName等方法獲取的dom列表(也叫 HTMLCollection)
  • 通過querySelectorAll()方法獲取的NodeList節點列表

下面,我們來分別看一下這3類 類數組

arguments

arguments是javascript的一個關鍵字。專指函數的參數集合,它包含了函數的所有參數以及其他屬性。它無需定義,可直接在函數體內使用

function args(a, b, c) {
	console.log(arguments)
	console.log(typeof arguments)
	console.log({}.toString.call(arguments))
}

args("a", "b", "c")

我們看看輸出結果

javascript類數組的深入理解

可以看出,arguments包含所有參數,并且存在length屬性,同時可以看出,他的類型是object,并且轉換為string后 是 object Arguments,代表是Arguments對象。同時,可以看到,他還有一個屬性callee,而這個屬性的值好像就是我們定義的這個函數體,那么我們輸出看一下

function args(a, b, c) {
	console.log(arguments.callee)
}

args("a", "b", "c")

javascript類數組的深入理解

可以看到,輸出的確實是我們函數自己。那既然表示的自己,請不要隨便去調用這個屬性,因為一旦調用,會不斷的調用自己,進入死循環,直到棧溢出。就像下面這樣

function args (a, b, c) {
 console.log(123)
 arguments.callee()
}

args("a", "b", "c")

javascript類數組的深入理解

dom列表(HTMLCollection)

這一類是指通過getElementsByTagName或者 getElementsByClassName 或者 getElementsByName獲取到的dom列表的集合。

<div>今天天氣不太好</div>
<div>因為下雨了</div>
<script>
 var domList = document.getElementsByTagName("div")
 console.log(domList)
 console.log(typeof domList)
 console.log({}.toString.call(domList))
</script>

javascript類數組的深入理解

可以看出,domList也存在length屬性。并且,轉換為string后是 object HTMLCollection。代表是HTMLCollection對象

節點列表(NodeList)

通過document.querySelectorAll()所獲取的節點的集合

<div class="abc">今天天氣不太好</div>
<div class="abc">因為下雨了</div>
<script>
 var nodeList = document.querySelectorAll("div")
 console.log(nodeList)
 console.log(typeof nodeList)
 console.log({}.toString.call(nodeList))
</script>

javascript類數組的深入理解

可以看出,nodeList同樣存在length屬性,且轉換成string后是 object NodeList,代表是NodeList對象。該對象是一個符合Iterator接口規范的對象,故它可以被for…of遍歷(什么是Iterator我就不在這里講述了,大家可以自己去看 什么是Iterator)

特點

類數組都不存在數組的原型方法,但當類數組需要調用數組方法去做任何事情時,可以通過以下方式

  • 利用call,apply進行方法借用,借用數組的各自方法
  • 將類數組轉換為數組。然后再調用數組方法

call,apply進行方法借用

其實我們上面也已經用過這個方法了,類數組轉為字符串時,我們上面是不是借用了對象的toString()方法啊

下面我們再多列幾個

function args(a, b, c) {
 Array.prototype.push.call(arguments, "123")
 console.log(arguments)
 Array.prototype.splice.call(arguments, 0, 1)
 console.log(arguments)
 Array.prototype.unshift.apply(arguments, [1,2,3])
 console.log(arguments)
}

args("a", "b", "c")

javascript類數組的深入理解

類數組轉數組

將類數組轉成數組后,就可以隨意調用各自數組方法,那么類數組如何轉成數組呢!

可借用數組的一些方法生成一個新數組

function args(a, b, c) {
 let arr = Array.prototype.slice.call(arguments)
 console.log(arr)
 arr = Array.prototype.concat.apply([], arguments)
 console.log(arr)
}

args("a", "b", "c")

javascript類數組的深入理解

利用ES6新增方法轉換為數組

ES6新增了一個Array.from方法,可將類數組轉為數組。還提供了展開運算符,可以直接在一個數組中展開類數組

function args(a, b, c) {
 let arr = Array.from(arguments)
 console.log(arr)
 arr = [...arguments]
 console.log(arr)
}

args("a", "b", "c")

javascript類數組的深入理解

好了,類數組就寫到這了,歡迎一起探討

總結

到此這篇關于javascript類數組的文章就介紹到這了,更多相關javascript類數組內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/weixin_42707287/article/details/114449169

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲高清色综合 | 亚洲精品久久久一区二区三区 | 91高清视频在线观看 | 91嫩草精品 | 精品久久久久一区二区国产 | 亚洲精品片 | 亚洲视频在线播放 | 成人欧美一区二区 | 男人午夜视频在线观看 | 国产色| 亚洲一区在线免费观看 | 欧美精品免费在线 | 欧美影院| 国产精品成人一区二区 | 欧美日韩久久久久 | 国产精品成人一区二区 | 国产精品伦理一区二区 | 黄色免费观看网址 | 三级黄色片在线免费观看 | 极品美女销魂一区二区三区 | av影音资源 | 久久精品国产一区 | 国产精品久久久久久久久久妞妞 | 国产在线精品一区 | 一区二区精品在线 | 国产中文字幕在线免费观看 | 色一色网站 | 精品国产乱码久久久久久牛牛 | 91视频导航 | 最近的中文字幕在线看视频 | 欧美日本精品 | 一级色视频 | 欧美日韩a | 一二三四区视频在线观看 | 男女啪啪做爰高潮www成人福利 | 日本黄色大片 | 成人免费在线观看 | 亚洲视频在线观看 | 四虎欧美 | 一本大道久久a久久精二百 在线a人片免费观看视频 | 日韩成人在线免费视频 |