js踩過的坑

2022-02-25 10:34:50 字數 1666 閱讀 9223

1.1.深拷貝/淺拷貝

這實際上算不上vue的問題,算是js基礎沒打好的坑吧。

先來看乙個簡單的例子:

let obj = ;

let copyobj = obj;

copyobj.name = 'fiona';

console.log(copyobj.name); // 'fiona'

console.log(obj.name); // 'fiona'

在js中也有棧(stack)和堆(heap)的概念:

所以上述例子中,屬於淺拷貝,當我們宣告乙個物件,由於他不屬於五種基本資料型別(即非簡單資料段),棧中會存放乙個我們宣告的obj變數,它指向了堆中實際的這個物件的位址。當我們把這個引用位址賦值給了copyobj,實際它獲得的是乙個與obj一致的指向堆中的位址。當copyojb改變了指向的物件位址的實際的值的時候,obj拿到的值也就自然而然變化了。看圖理解⬇

嗯,道理我都懂,但是寫**我就自然而然的忽略了,該反思。。。

深拷貝的方法

let obj = ;

let copyfunc = (originobj) => ;

for(let key in originobj)

return copyobj;

};let copyobj = copyfunc(obj);

copyobj.name = 'fiona';

console.log(copyobj.name); // 'fiona'

console.log(obj.name); // 'fiona-sun'

let obj = ;

let copyobj = json.parse(json.stringify(obj));

copyobj.name = 'fiona';

console.log(copyobj.name); // 'fiona'

console.log(obj.name); // 'fiona-sun'

let obj = ;

let copyobj = object.assign({}, obj);

copyobj.name = 'fiona';

console.log(copyobj.name); // 'fiona'

console.log(obj.name); // 'fiona-sun'

let arr = [1,2,3];

let copyarr = [...obj];

copyarr[2] = 0;

console.log(copyarr[2]); // 0

console.log(arr[2]); // 2

詳細x

沒有英漢互譯結果

請嘗試網頁搜尋

git踩過的坑

4.git 修改當前的project的使用者名稱的命令為 git config user.name 你的目標使用者名稱 git 修改當前的project提交郵箱的命令為 git config user.email 你的目標郵箱名 如果你要修改當前全域性的使用者名稱和郵箱時,需要在上面的兩條命令中新增...

springboot踩過的坑

設定上下文路徑context path不生效 springboot 2.0之前的語法 server.context path xx 2.0之後的語法 server.servlet.context path xx 在配置yml時,報錯如下 caused by org.yaml.snakeyaml.sc...

SQL UNION踩過的坑

union 操作符用於合併兩個或多個 select 語句的結果集。請注意,union 內部的 select 語句必須擁有相同數量的列。列也必須擁有相似的資料型別。同時,每條 select 語句中的列的順序必須相同。select column name s from table name1 union...