前言
深淺拷貝主要是針對于引用類型而言的
深拷貝
1. JSON.parse(JSON.strigify(Str))
序列化的作用是存儲(對象本身存儲的只是一個地址映射,如果斷電,對象將不復(fù)存在,
因此需將對象的內(nèi)容轉(zhuǎn)換成字符串的形式再保存在磁盤上 ).
傳輸(例如 如果請求的Content-Type 是 application/x-www-form-urlencoded,
則前端這邊需要使用qs.stringify(data)來序列化參數(shù)再傳給后端,否則后端接受不到;
JSON.stringify()
該方法用于將一個字轉(zhuǎn)換為JSON字符串,該字符串符合JSON格式,并且可以被JSON.parse()方法還原。
- 對于原始類型的字符串,轉(zhuǎn)換結(jié)果會帶雙引號
- 如果要轉(zhuǎn)換的對象的屬性是undefined,函數(shù)或xml對象,該屬性會被JSON.stringify()過濾
- 如果要轉(zhuǎn)換的數(shù)組中有undefined和函數(shù),他們都會轉(zhuǎn)換為null
- 正則對象會被轉(zhuǎn)換成空對象
- 會忽略對象的不可遍歷的屬性
- JSON.stringify()方法還可以接受一個數(shù)組,作為第二個參數(shù),指定參數(shù)對象的哪些屬性需要轉(zhuǎn)成字符串,第二個參數(shù)還可以是一個函數(shù),用來更改JSON.stringify()的返回值。
- JSON.stringify()還可以接受第三個參數(shù),用于增加返回的 JSON 字符串的可讀性。比如加入‘\t’
- 如果參數(shù)對象有自定義的toJSON()方法,那么JSON.stringify()會使用這個方法的返回值作為參數(shù),而忽略原對象的其他屬性。
JSON.parse()文章來源:http://www.zghlxwxcb.cn/news/detail-805596.html
- JSON.parse()方法用于將 JSON 字符串轉(zhuǎn)換成對應(yīng)的值。
- 如果傳入的字符串不是有效的 JSON 格式,JSON.parse()方法將報(bào)錯。
- JSON.parse()方法可以接受一個處理函數(shù),作為第二個參數(shù),用法與JSON.stringify()方法類似
2. lodash.deepclone
3. structuredClone
const original = { name: "MDN" };
original.itself = original;
// Clone it
const clone = structuredClone(original);
淺拷貝
let arr = [{name:'bruce'},1,2,3]
let newArr = arr.slice()
// 由于數(shù)組內(nèi)部屬性值為引用對象,因此使用slice和concat對對象數(shù)組的拷貝,整個拷貝還是淺拷貝,
// 拷貝之后數(shù)組各個值的指針還是指向相同的存儲地址。
let newArr2 = [...arr]
Object.assign()
總結(jié)
以上就是今天的內(nèi)容了,JavaScript深淺拷貝的幾種方式文章來源地址http://www.zghlxwxcb.cn/news/detail-805596.html
到了這里,關(guān)于JavaScript深淺拷貝的幾種方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!