關於引用型別 陣列和物件的賦值

2021-08-30 02:08:33 字數 1370 閱讀 3221

js中的陣列和物件都是引用型別,其實說白了,陣列的資料型別也是物件,因此我們在實際專案中需要注意,如果直接將乙個物件賦值給另乙個空物件,這個操作僅僅是讓兩個物件的指標指向了同乙個地方。

此時的兩個物件中的任意乙個的值發生改變,勢必都會影響到另乙個。

let arr1=[1,2,3];

let arr2=arr1;

console.log(arr1,arr2)//[1,2,3],[1,2,3]

arr2.push(4);

console.log(arr1,arr2)//[1,2,3,4],[1,2,3,4]

方法一:concat()方法
let arr1=[1,2,3];

let arr2=.concat(arr1)

arr1//[1, 2, 3]

arr2//[1, 2, 3]

arr2.push(4)

arr1//[1, 2, 3]

arr2//[1, 2, 3,4]

方法二:json.stringify()+json.parse()

先轉換成字串在轉換成陣列

let arr1=[1,2,3];

let arr2=json.parse(json.stringify(arr1))

注意:對於物件陣列,方法一不適用,應當使用方法二。具體如下:

let arr1=[

,];let arr2=.concat(arr1);

arr1[0].value=23

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-m6b3qf0r-1591080410527)(

方法三:es6的擴充套件運算子 …

let arr1=[1,2,3];

let arr2=[...arr1];

方法四:jquery的extend
let arr1=[1,2,3];

let arr2=$.extend(true,,arr1);

方法五:object.assign()
let arr1=[1,2,3];

let arr2=object.assign(,arr1);

tip: 以上示例均採用的陣列,對於物件同樣適用(除了方法一)

關於陣列的引用和引用的陣列

c primer中第16章 模板與泛型程式設計那塊提到 template void array init t parm n 這是給出的解釋,我認為比較準確。array首先向右結合,所以這個相當於 int array array是個陣列,其中的元素是引用 應該叫 引用的陣列int array arra...

引用型別 物件和陣列

1.建立物件 物件 引用型別的值,是引用型別的乙個例項 建立object例項。方法一 使用new操作符後跟object建構函式。var person new object person.name nicholas person.age 29 方法二 使用物件字面量表示法 不會呼叫object建構函式...

陣列的引用(陣列的賦值)

public class se int b system.out.println 陣列a的元素個數為 a.length system.out.println 陣列b的元素個數為 b.length system.out.println 陣列a的引用 a system.out.println 陣列b的引...