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

首頁 > 編程 > JavaScript > 正文

Javascript數(shù)組中的按值傳遞

2019-11-14 12:08:22
字體:
供稿:網(wǎng)友

var a = [1,2,3,4,5,6]; var b = a; a = [“你”,”我”,”他”]; alert(b); //[1,2,3,4,5,6] 當(dāng)被朋友問到b顯示的值是什么時?這樣一個問題,當(dāng)時直接的理解,數(shù)組是引用類型,應(yīng)該是傳遞的是引用值,so b也是[“你”,”我”,”他”],于是錯了。js數(shù)組傳遞是跟基本類型一樣創(chuàng)建副本嗎?

于是,我又做了如下測試:

var a = [1,2,3,4,5,6]; var b = a; a.length–; alert(b); // [1,2,3,4,5];

這樣好像又是引用傳遞了? 暈了!!!

后面反復(fù)思考推敲,原理如下: a = [“你”,”我”,”他”];//改變的是a引用本身,沒有改變數(shù)組對象 a.length–;//改變的是數(shù)組對象,a引用沒有改變 b = a;//該操作后,b直接指向數(shù)組對象,不是b指向a,a再指向數(shù)組。 //所以改變a引用并不會對b引用造成影響,改變數(shù)組對象可以。

圖示:

這里寫圖片描述 這里寫圖片描述

例如:

1.var a = [1,2,3,4,5,6];

2.var b = a;

3.a = [“你”,”我”,”他”];

4.console.log(b);

此時b為多少呢?

b = [1,2,3,4,5,6];

為什么此處a的改變不會是b發(fā)生變化?關(guān)鍵問題是第3行語句的理解。

首先第一行,a引用數(shù)組[1,2,3,4,5,6],不妨先假設(shè)數(shù)組[1,2,3,4,5,6]地址為A或0x1001(內(nèi)存隨機(jī)分配的); 第二行,var b = a;應(yīng)理解為,b引用了a當(dāng)前的指向地址,即b指向地址A,即數(shù)組[1,2,3,4,5,6]。 第三行,a = [“你”,”我”,”他”];為修改a的指向地址,使a指向數(shù)組 [“你”,”我”,”他”],不妨設(shè)其地址為B或0x1009。 所以,最終結(jié)果為,b指向地址A,數(shù)組[1,2,3,4,5,6],a指向地址B,數(shù)組 [“你”,”我”,”他”]; 其實(shí),只要理解清楚,對數(shù)組變量的操作,實(shí)質(zhì)為修改數(shù)組本身數(shù)據(jù),還是修改變量的地址,則將一目了然。

舉個例子:

arr = [1,2,3,4];

arr.pop();//此處操作為修改arr指向的數(shù)組本身。結(jié)果為arr = [1,2,3];

//a.pop(); <=> a.length–;

//pop() 方法將刪除 arrayObject 的最后一個元素,把數(shù)組長度減 1,并且返回它刪除的元素的值。如果數(shù)組已經(jīng)為空,則 pop() 不改變數(shù)組,并返回 undefined 值。

newArr = arr;//此處操作為賦予newArr指向arr所指向的地址,即數(shù)組[1,2,3]。

arr = [4,5,6];//此處操作為使arr指向新數(shù)組[4,5,6],arr指向新數(shù)組地址。

console.log(arr);//此處arr = [4,5,6]

console.log(newArr);//newArr = [1,2,3];

最后,一言以蔽之,關(guān)于數(shù)組變量的操作,應(yīng)關(guān)注變量所指向地址的數(shù)組,以及操作所修改的為哪個地址的數(shù)組。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 绵竹市| 通许县| 大英县| 志丹县| 长治县| 安平县| 阿图什市| 高密市| 睢宁县| 德化县| 湖北省| 孟连| 宕昌县| 杂多县| 济阳县| 建昌县| 海盐县| 常山县| 开江县| 富阳市| 冷水江市| 东山县| 海丰县| 阿荣旗| 巫溪县| 甘德县| 读书| 额尔古纳市| 锡林浩特市| 云梦县| 轮台县| 麻江县| 微山县| 大冶市| 阳曲县| 宁明县| 壤塘县| 宜宾县| 成都市| 安阳县| 乐昌市|