国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

詳解vue數(shù)組遍歷方法forEach和map的原理解析和實際應用

2024-05-06 15:27:56
字體:
供稿:網(wǎng)友

一、前言

forEach和map是數(shù)組的兩個方法,作用都是遍歷數(shù)組。在vue項目的處理數(shù)據(jù)中經(jīng)常會用到,這里介紹一下兩者的區(qū)別和具體用法示例。

二、代碼

1. 相同點

都是數(shù)組的方法 都用來遍歷數(shù)組 兩個函數(shù)都有4個參數(shù):匿名函數(shù)中可傳3個參數(shù)item(當前項), index(當前項的索引), arr(原數(shù)組),還有一個可選參數(shù)this 匿名函數(shù)中的this默認是指向window的 對空數(shù)組不會調(diào)用回調(diào)函數(shù) 不會改變原數(shù)組(某些情況下可改變)

2. forEach

(1) 沒有返回值。

var a = [1,2,3,4,5]var b = a.forEach((item) => {  item = item * 2})console.log(b)// undefiined

(2) 可改變原數(shù)組的情況

下面來看幾個例子:

var a = [1,2,3,4,5]a.forEach((item) => {  item = item * 2})console.log(a)// [1,2,3,4,5]

這里原數(shù)組并沒有發(fā)生改變。

var a = [1,'1',{num:1},true]a.forEach((item, index, arr) => {  item = 2})console.log(a)// [1,'1',{num:1},true]

這里修改item的值,依然沒有修改原數(shù)組。

var a = [1,'1',{num:1},true]a.forEach((item, index, arr) => {  item.num = 2  item = 2})console.log(a)// [1,'1',{num:2},true]

當修改數(shù)組中對象的某個屬性時,發(fā)現(xiàn)屬性改變了。

為什么會這樣呢?

這里就要引入棧(stack)內(nèi)存和堆(heap)內(nèi)存的概念了,對于JS中的基本數(shù)據(jù)類型,如String,Number,Boolean,Undefined,Null是存在于棧內(nèi)存中的,在棧內(nèi)存中儲存變量名及相應的值。而Object,Array,Function存在于堆內(nèi)存中,在堆內(nèi)存中儲存變量名及引用位置。

在第一個例子中,為什么直接修改item無法修改原數(shù)組呢,因為item的值并不是相應的原數(shù)組中的值,而是重新建立的一個新變量,值和原數(shù)組相同。

在第二個例子中,數(shù)組中的對象的值也沒有改變,是因為新創(chuàng)建的變量和原數(shù)組中的對象雖然指向同一個地址,但改變的是新變量的值,即新對象的值為2,原數(shù)組中的對象還是{num:1}。

在第三個例子中,由于對象是引用類型,新對象和舊對象指向的都是同一個地址,所以新對象把num變成了2,原數(shù)組中的對象也改變了。

var a = [1,2,3,4,5]a.forEach((item, index, arr) => {  arr[index] = item * 2})console.log(a)// [2,4,6,8,10]

在回調(diào)函數(shù)里改變arr的值,原數(shù)組改變了。

這個例子和例三其實同理,參數(shù)中的arr也只是原數(shù)組的一個拷貝,如果修改數(shù)組中的某一項則原數(shù)組也改變因為指向同一引用地址,而如果給參數(shù)arr賦其他值,則原數(shù)組不變。

其實想要知道參數(shù)中的item和arr是不是重新創(chuàng)建的變量,在回調(diào)函數(shù)中打印就知道了。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 礼泉县| 阿瓦提县| 延寿县| 华安县| 闸北区| 仪征市| 东至县| 寻乌县| 肇州县| 庄浪县| 扎赉特旗| 岳池县| 迁西县| 遂川县| 襄垣县| 樟树市| 大厂| 特克斯县| 富平县| 曲靖市| 唐河县| 那坡县| 开江县| 通许县| 平果县| 临朐县| 灯塔市| 青铜峡市| 防城港市| 五华县| 吴堡县| 长海县| 建水县| 南陵县| 若羌县| 怀仁县| 普兰店市| 仙游县| 陇南市| 乌苏市| 炉霍县|