JSON是一種輕便的數據交換格式,被廣泛應用于Web API的數據交互。在JavaScript編程中,需要經常對JSON對象進行拷貝和賦值的操作。下面介紹兩種方法實現JSON拷貝賦值。
方法一:深拷貝
function deepCopy(obj) { let copy = obj instanceof Array ? [] : {}; for (let key in obj) { if (obj.hasOwnProperty(key)) { copy[key] = typeof obj[key] === 'object' ? deepCopy(obj[key]) : obj[key]; } } return copy; } let original = {foo: 'bar', arr: [1, 2, 3]}; let copied = deepCopy(original); console.log(original === copied, copied); // false, {foo: 'bar', arr: [1, 2, 3]}
深拷貝會遞歸地遍歷JSON對象,將其每個屬性值都拷貝到新的對象上。需要注意的是,深拷貝有一定的性能開銷,最好在拷貝較小的JSON對象時使用。
方法二:淺拷貝
function shallowCopy(obj) { return Object.assign({}, obj); } let original = {foo: 'bar', arr: [1, 2, 3]}; let copied = shallowCopy(original); console.log(original === copied, copied); // false, {foo: 'bar', arr: [1, 2, 3]}
淺拷貝只會拷貝JSON對象的第一層屬性值,如果JSON對象的屬性值是一個引用類型(如數組或對象),則只會拷貝它的引用而不是對象本身。需要注意的是,如果JSON對象的屬性名有相同的,則后面的屬性值會覆蓋前面的屬性值。
以上介紹了JSON拷貝賦值的兩種方法,開發者可以根據實際需求選擇適合自己的方式。