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

首頁 > 編程 > JavaScript > 正文

JavaScript數組深拷貝和淺拷貝的兩種方法

2019-11-20 20:49:20
字體:
來源:轉載
供稿:網友

例如這個例子:

復制代碼 代碼如下:
var arr = ["One","Two","Three"];

var arrto = arr;
arrto[1] = "test";
document.writeln("數組的原始值:" + arr + "<br />");//Export:數組的原始值:One,test,Three
document.writeln("數組的新值:" + arrto + "<br />");//Export:數組的新值:One,test,Three

像上面的這種直接賦值的方式就是淺拷貝,很多時候,這樣并不是我們想要得到的結果,其實我們想要的是arr的值不變,不是嗎?

方法一:js的slice函數

復制代碼 代碼如下:

對于array對象的slice函數,
返回一個數組的一段。(仍為數組)
arrayObj.slice(start, [end]) 
參數
arrayObj 
必選項。一個 Array 對象。 
start 
必選項。arrayObj 中所指定的部分的開始元素是從零開始計算的下標。 
end 
可選項。arrayObj 中所指定的部分的結束元素是從零開始計算的下標。 
說明
slice 方法返回一個 Array 對象,其中包含了 arrayObj 的指定部分。
slice 方法一直復制到 end 所指定的元素,但是不包括該元素。如果 start 為負,將它作為 length + start處理,此處 length 為數組的長度。如果 end 為負,就將它作為 length + end 處理,此處 length 為數組的長度。如果省略 end ,那么 slice 方法將一直復制到 arrayObj 的結尾。如果 end 出現在 start 之前,不復制任何元素到新數組中。

例子:
復制代碼 代碼如下:

var arr = ["One","Two","Three"];

var arrtoo = arr.slice(0);
arrtoo[1] = "set Map";
document.writeln("數組的原始值:" + arr + "<br />");//Export:數組的原始值:One,Two,Three
document.writeln("數組的新值:" + arrtoo + "<br />");//Export:數組的新值:One,set Map,Three

方法二:js的concat方法

復制代碼 代碼如下:

concat() 方法用于連接兩個或多個數組。
該方法不會改變現有的數組,而僅僅會返回被連接數組的一個副本。
語法
arrayObject.concat(arrayX,arrayX,......,arrayX)
說明
返回一個新的數組。該數組是通過把所有 arrayX 參數添加到 arrayObject 中生成的。如果要進行 concat() 操作的參數是數組,那么添加的是數組中的元素,而不是數組。
var arr = ["One","Two","Three"];

例子:
復制代碼 代碼如下:
  
var arrtooo = arr.concat();
arrtooo[1] = "set Map To";
document.writeln("數組的原始值:" + arr + "<br />");//Export:數組的原始值:One,Two,Three
document.writeln("數組的新值:" + arrtooo + "<br />");//Export:數組的新值:One,set Map To,Three

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乾安县| 隆安县| 鹤岗市| 建昌县| 乡城县| 龙海市| 乌兰浩特市| 新丰县| 新化县| 福贡县| 巍山| 都江堰市| 通州市| 林口县| 乡宁县| 织金县| 安泽县| 龙山县| 博野县| 大竹县| 永泰县| 剑河县| 甘肃省| 阿鲁科尔沁旗| 诸暨市| 柯坪县| 大连市| 仙居县| 杭锦旗| 尚义县| 甘谷县| 盖州市| 册亨县| 大丰市| 金平| 梁山县| 日土县| 社会| 梅河口市| 郸城县| 曲阜市|