欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript中的偽數(shù)組用法及說明

 更新時間:2023年02月10日 16:35:57   作者:高先生的貓  
這篇文章主要介紹了JavaScript中的偽數(shù)組用法及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

JavaScript中的偽數(shù)組

1.什么是偽數(shù)組

JavaScript中存在有一種類數(shù)組,或者說偽數(shù)組。經(jīng)常見到的偽數(shù)組有函數(shù)的arguments對象、dom.querySelectorAll等獲取的NodeList類(NodeList本身具有forEach方法)等。

偽數(shù)組并不是數(shù)組,它沒有繼承Array.prototype,但是它“看起來像數(shù)組”,它本身沒有數(shù)組的標準方法,但是它可以復(fù)用這些標準方法。

例子

function arrayLike() {
? ? arguments.forEach(a => console.log(a));//TypeError: arguments.forEach is not a function
}
arrayLike(1, 2, 3);

如上例所示,arguments對象本身并沒有forEach方法,但是它可以復(fù)用數(shù)組的這些標準方法。

例子

function arrayLike() {
? ? // arguments.forEach(a => console.log(a));
? ? [].forEach.call(arguments, a => console.log(a));// 1 2 3 通過call改變this指向,調(diào)用數(shù)組的方法
? ? [...arguments].forEach(a => console.log(a));// 1 2 3 ?構(gòu)建一個真實數(shù)組,然后調(diào)用數(shù)組的方法
}
arrayLike(1, 2, 3);

2.如何創(chuàng)建一個偽數(shù)組對象

一個數(shù)組對象必然具有兩個特點:

  • 具有一個范圍在  0~232-1 的整型length屬性
  • length屬性大于該對象的最大索引,索引是一個  0-232 -2 范圍內(nèi)的整數(shù)

所以很簡單,只要實現(xiàn)這兩個特點,一個對象就是偽數(shù)組對象了。

例子

const arr = { 1: 'AAA', 3: 'CCC', length: 8, }; [].forEach.call(arr, (item, i) => console.log(item, i)); //AAA 1 CCC 3

3.數(shù)組的concat方法

對于數(shù)組和偽數(shù)組,在數(shù)組的標準方法中,只有concat方法是不通用的,對于一個偽數(shù)組,concat方法會將其作為一個整體連接起來。

例子

console.log([].concat.call(arr, [7, 8]));//[ { '1': 'AAA', '3': 'CCC', length: 8 }, 7, 8 ]
console.log([1, 2].concat([7, 8]));//[ 1, 2, 7, 8 ]

上例展示了數(shù)組和偽數(shù)組調(diào)用concat的不同結(jié)果,在遇到這種情況時,我們只有自己對偽數(shù)組進行轉(zhuǎn)換,比如:

1.通過slice方法,復(fù)制偽數(shù)組

console.log([].concat.call([].slice.call(arr), [7, 8]));
//[ <1 empty item>, 'AAA', <1 empty item>, 'CCC', <4 empty items>, 7, 8 ]

2.通過Symbol.isConcatSpreadable改變對偽數(shù)組對象進行concat操作時的默認行為

const arr = {
? ? 1: 'AAA',
? ? 3: 'CCC',
? ? length: 8,
? ? [Symbol.isConcatSpreadable]: true,
};
console.log([].concat.call(arr, [7, 8]));
//[ <1 empty item>, 'AAA', <1 empty item>, 'CCC', <4 empty items>, 7, 8 ]

JavaScript偽數(shù)組變真數(shù)組

首先介紹兩種非常簡單直接的方法(偽數(shù)組為可迭代對象):

[...偽數(shù)組] // ES6的語法糖,直接將偽數(shù)組(對象)變?yōu)檎鏀?shù)組
Array.from(偽數(shù)組) // Array中的靜態(tài)方法,直接將偽數(shù)組(對象)變?yōu)檎鏀?shù)組

下面講解偽數(shù)組和真數(shù)組的區(qū)別,還有利用數(shù)組的方法將偽數(shù)組變?yōu)檎鏀?shù)組:

偽數(shù)組與真數(shù)組的區(qū)別

  • 偽數(shù)組是對象
  • 偽數(shù)組原型是Object,而不是Array
  • 所以偽數(shù)組沒有數(shù)組的方法,如push()、shift()、find()等等
  • 偽數(shù)組的屬性名與數(shù)組的下標相似,以0,1,2,… 等的數(shù)字表示,也擁有l(wèi)ength屬性

數(shù)組的方法對象能用的上嗎?==> 因為數(shù)組的大部分方法是要遍歷數(shù)組,進行處理再創(chuàng)建一個新數(shù)組放回的,而數(shù)組項的調(diào)用 arr[i] 這種形式對象也能用,所以偽數(shù)組這個對象能適應(yīng)部分數(shù)組方法

偽數(shù)組是對象,那怎么利用數(shù)組的方法呢?==> 可以使用 [].數(shù)組方法.call(偽數(shù)組, 參數(shù)...) 或 [].數(shù)組方法.apply(偽數(shù)組, 參數(shù)) 來調(diào)用

所以利用偽數(shù)組與數(shù)組的相似點(屬性與下標相似,擁有l(wèi)ength屬性,都可以用 [ ] 調(diào)用),可以很容易的利用數(shù)組的方法將偽數(shù)組變?yōu)檎鏀?shù)組。

// 下面我嘗試使用了數(shù)組中所以可能的方法,得出下列能將偽數(shù)組變?yōu)閿?shù)組的方法
// 函數(shù)中的 arguments 是存儲函數(shù)參數(shù)列表和特殊方法的對象,它是一個偽數(shù)組,我們將以它為例進行嘗試
// 在實際應(yīng)用中,如果偽數(shù)組為可迭代對象,直接運用前兩種最簡單的方法就夠了

function fun1(v1, v2, v3) {
?? ?console.log('-----------------arguments-------------------')
?? ?console.log(arguments) // Arguments { 0: 1, 1: 2, 2: 3, … }
?? ?console.log(Array.isArray(arguments)) // false
?? ?console.log('------------------------------------')
?? ?
?? ?let x = null ?// 定義變量x,接收偽數(shù)組轉(zhuǎn)化后的結(jié)果
?? ?
?? ?// 簡單方法(偽數(shù)組為可迭代對象)
?? ?x = [...arguments]
?? ?
?? ?x = Array.from(arguments)
?? ?
?? ?
?? ?// 調(diào)用數(shù)組方法
?? ?x = [].filter.call(arguments, v => true)
?? ?
?? ?x = [].map.call(arguments, v => v)
?? ?
?? ?x = [].slice.call(arguments)


?? ?// 上面各個方法調(diào)用后,成功將偽數(shù)組轉(zhuǎn)為真數(shù)組,其返回的真數(shù)組都是一樣的,如下
?? ?console.log(x) // Array(3) [ 1, 2, 3 ]
?? ?console.log(Array.isArray(x)) // true
}?

fun1(1, 2, 3)

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • js模擬實現(xiàn)京東詳情頁圖片放大效果

    js模擬實現(xiàn)京東詳情頁圖片放大效果

    這篇文章主要為大家詳細介紹了js模擬實現(xiàn)京東詳情頁圖片放大效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • DWR中各種java方法的調(diào)用

    DWR中各種java方法的調(diào)用

    DWR是一個框架,簡單的說就是能夠在javascript直接調(diào)用java方法,而不必去寫一大堆的javascript代碼。它的實現(xiàn)是基于ajax的,可以實現(xiàn)無刷新效果。不少DWR的例子,但大都只是某種方法的調(diào)用只在使用層面上介紹DWR,并不涉更多的技術(shù)與設(shè)計javascript中是如何調(diào)用的。
    2016-05-05
  • JavaScript截取字符串的2個函數(shù)介紹

    JavaScript截取字符串的2個函數(shù)介紹

    這篇文章主要介紹了JavaScript截取字符串的2個函數(shù)介紹,它們分別是substring和substr函數(shù),本文用實例講解了它們的用法,需要的朋友可以參考下
    2014-08-08
  • JavaScript實現(xiàn)三級級聯(lián)特效

    JavaScript實現(xiàn)三級級聯(lián)特效

    這篇文章主要介紹了JavaScript實現(xiàn)三級級聯(lián)特效,選擇省會出現(xiàn)相應(yīng)的縣下拉框,同時市的下拉框改變,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • ES7之Async/await的使用詳解

    ES7之Async/await的使用詳解

    這篇文章主要介紹了ES7之Async/await的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • js判斷用戶是輸入的地址請求的路徑(實例講解)

    js判斷用戶是輸入的地址請求的路徑(實例講解)

    下面小編就為大家?guī)硪黄猨s判斷用戶是輸入的地址請求的路徑(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • js頁面跳轉(zhuǎn)的常用方法整理

    js頁面跳轉(zhuǎn)的常用方法整理

    跳轉(zhuǎn)頁面的方法有很多,在本文整理了一些比較常用,并有示例代碼,感興趣的朋友可以參考下
    2013-10-10
  • js簡單實現(xiàn)HTML標簽Select聯(lián)動帶跳轉(zhuǎn)

    js簡單實現(xiàn)HTML標簽Select聯(lián)動帶跳轉(zhuǎn)

    Select聯(lián)動帶跳轉(zhuǎn)的效果想必大家并不陌生吧,下面有個不錯的示例,感興趣的朋友可以參考下
    2013-10-10
  • javascript實現(xiàn)京東快遞單號的查詢效果

    javascript實現(xiàn)京東快遞單號的查詢效果

    這篇文章主要為大家詳細介紹了javascript實現(xiàn)京東快遞單號的查詢效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 使用js檢測瀏覽器是否支持html5中的video標簽的方法

    使用js檢測瀏覽器是否支持html5中的video標簽的方法

    這篇文章主要介紹了使用js檢測瀏覽器是否支持html5中的video標簽的方法,需要的朋友可以參考下
    2014-03-03

最新評論