当前位置:首页 > JavaScript

js实现一个浅拷贝

2026-01-31 10:57:39JavaScript

浅拷贝的实现方法

浅拷贝是指创建一个新对象,该对象复制原始对象的属性值。如果属性是基本类型,拷贝的是值;如果属性是引用类型,拷贝的是内存地址,因此新旧对象会共享同一块内存。以下是几种常见的浅拷贝实现方法。

使用展开运算符(Spread Operator)

展开运算符可以快速实现对象的浅拷贝。

js实现一个浅拷贝

const original = { a: 1, b: { c: 2 } };
const copy = { ...original };
console.log(copy); // { a: 1, b: { c: 2 } }

使用Object.assign()

Object.assign()方法可以将所有可枚举属性从一个或多个源对象复制到目标对象。

const original = { a: 1, b: { c: 2 } };
const copy = Object.assign({}, original);
console.log(copy); // { a: 1, b: { c: 2 } }

使用Array.slice()(针对数组)

对于数组,可以使用slice()方法实现浅拷贝。

js实现一个浅拷贝

const original = [1, 2, { a: 3 }];
const copy = original.slice();
console.log(copy); // [1, 2, { a: 3 }]

使用Array.concat()(针对数组)

concat()方法也可以用于数组的浅拷贝。

const original = [1, 2, { a: 3 }];
const copy = original.concat();
console.log(copy); // [1, 2, { a: 3 }]

手动实现浅拷贝

可以通过遍历对象的属性手动实现浅拷贝。

function shallowCopy(obj) {
    if (typeof obj !== 'object' || obj === null) {
        return obj;
    }
    const copy = Array.isArray(obj) ? [] : {};
    for (let key in obj) {
        if (obj.hasOwnProperty(key)) {
            copy[key] = obj[key];
        }
    }
    return copy;
}

const original = { a: 1, b: { c: 2 } };
const copy = shallowCopy(original);
console.log(copy); // { a: 1, b: { c: 2 } }

注意事项

  • 浅拷贝只复制对象的第一层属性,嵌套对象仍然是引用。
  • 如果原始对象包含引用类型的属性,修改拷贝对象的引用属性会影响原始对象。
const original = { a: 1, b: { c: 2 } };
const copy = { ...original };
copy.b.c = 3;
console.log(original.b.c); // 3

以上方法适用于大多数场景,但需要根据实际需求选择合适的实现方式。

标签: js
分享给朋友:

相关文章

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js实现 拖动

js实现 拖动

实现拖动的步骤 HTML 结构 创建一个可拖动的元素和一个放置区域: <div id="draggable" draggable="true">拖动我</div> <d…

js实现图片放大

js实现图片放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性实现图片放大效果。当鼠标悬停时,图片会平滑放大。 const img = document…