Jiang
Vue新手夏令營
一般物件賦值到一個變數上,其實是傳參考方式,物件是一樣的:
Learn More →
Learn More →
// #1 物件是以傳參考的形式賦值
const person = {
name: '小明',
obj: {}
}
const person2 = person;
person2.name='杰倫';
// console.log(person2 === person); // true
// console.log(person2 , person); // 兩個 name 一起變杰倫
// 物件陣列函式都是傳參考的特性,不會直接寫在原本記憶體位置,而會建立新的記憶體空間
const obj2 = person.obj;
obj2.name='物件下的名稱';
console.log(person);
Learn More →
所以像上面的code,當改了 person2.name 時,其實原本 person.name 也會改到,因為他們本就是指向同一個物件記憶體空間。
const fn = (item) => {
item.name = '杰倫';
}
const person = {
name: '小明',
obj: {}
}
fn(person.name);//杰倫
function傳參數方式改也會影響到同一個物件
Object.assign()
{...物件名稱}
// #3 解決方案
// #3-1 淺層拷貝
const person = {
name: '小明',
obj: {}
}
const person2 = Object.assign({}, person); //空物件,把 person 傳進來,把值傳到 obj
const person3 = {
...person // 展開
}
console.log(person === person2,person === person3); // false false
person2.obj.age=16;
console.log(person,person2);
// 淺層拷貝只會複製第一層的內容,第二層的內容指向原有的參考,所以第二層有修改,原本的物件會被影響
淺拷貝只有第一層屬性有另外拷貝出來,
後面層數的屬性值都還是參考原物件屬性的,
代表改 person2.obj 時,person.obj 也會被改動到。
深層拷貝:先用 JSON.stringify()
轉為字串,
再用 JSON.parse()
轉回物件,完整拷貝
const person2 = JSON.parse(JSON.stringify(person));
// 先將物件轉為字串 再把字串轉物件
// console.log(person2);
person.obj.age=16;
console.log(person2,person);
只能拷貝純資料,物件函式無法
Learn More →
Vue 新手夏令營 課程頁面 :sun_with_face:筆記入口 JS 大約10月開班
Jul 28, 2021Vue 新手夏令營 課程頁面 :sun_with_face:筆記入口 直播影片存檔 主線課程 本週複習上一週的基礎運行及介紹實戰高使用率的指令 指令攻略秘笈 活動二:全指令架構概念
Jul 22, 2021課前 需要知道的語法糖|課前筆記 by Sz this 到底是誰|課前筆記 by Sz 物件傳參考|課前筆記 by Sz 基礎的 Promise|課前筆記 by Sz 用 axios 串接 API|課前筆記 by Sz 在瀏覽器運行 ES 模組|課前筆記 by Sz 現行的 ES 模組使用技巧|課前筆記 by Sz 物件傳參考特性|筆記 by Jiang
Jul 18, 2021Vue 新手夏令營 課程頁面:內含本週作業 :sun_with_face:筆記入口 本週範例程式碼 來自天使的筆記(用力參考) 課前知識 不弄懂存活率不樂觀喔 需要知道的語法糖|筆記 by Sz this 到底是誰|筆記 by Sz
Jul 16, 2021or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up