JS陣列與物件賦值問題

2021-10-01 06:39:13 字數 1267 閱讀 4169

最近有群友遇到乙個問題 就是給陣列賦值遇到的一些問題 正好自己也不了解 就去網上查了一些資料 在這裡做一下總結

問題1:

把 a 賦值給 b ,改變 b 的值發現 a 的值也被改變了,這和我們想象的不一樣,為什麼呢?

// 1. 陣列

var a =[1

,2];

var b = a;

b[0]=

3;console.

log(a)

;// [3,2]

// 2. 物件

var a =

var b = a;

b.name =

'lokka'

; console.

log(a)

;//

——這是因為陣列、物件、函式等都是引用型別

js分兩種資料型別:

基本資料型別:numberstringbooleannullundefinedsymbol(es6),這些型別可以直接操作儲存在變數中的實際值。

引用資料型別:object(在js中除了基本資料型別以外的都是物件,資料是物件,函式是物件,正規表示式是物件)

把 a 賦值給 b ,就相當於把 a 的記憶體位址指向 b ,即 a 和 b 指向同一記憶體位址, 改變了 b 就相當於改變了 a

問題2:

用 es6 的擴充套件運算子 來賦值就不會改變原陣列,這又是為什麼呢?

var a =[1

,2];

var b =

[...a]

; b[0]

=3; console.

log(a)

;// [1,2]

——這是因為,擴充套件運算子相當於遍歷了陣列 a 的值,所以b 是乙個新的陣列,記憶體位址不是同乙個,所以改變 b 不會影響陣列 a

js物件與陣列

var element0 0 0 var element1 1 1 var col0 element0,element0 var col1 element1,element1 var arr col0 col1 alert arr 0 0 0 結果是 0 改變它的值 arr 0 0 0 1 改變的e...

js 賦值問題

var foo var bar foo foo.x foo 輸出foo.x foo.x undefined為什麼呢?先看前面兩句 var foo var bar foo 這兩句的意思是定義了foo為乙個物件,並且讓bar指向這個物件。這很簡單。foo.x foo 等價於 foo.x foo 注意,此...

js賦值問題

js 引用 賦值 物件複製 陣列複製等 獲取基礎引數列表資料 getedittabledata event this.fieldconfdtos event 今天在用angular做父子元件的一些資料傳遞和處理時發現,子元件通過事件傳給父元件的資料被父元件處理後影響到了子元件。event是子元件傳遞...